본문 바로가기
블록체인/WEB3 개발

솔리디티 컴파일러(solc) 설치하고 컴파일해보기

by 제이제이_은재 2022. 7. 12.
반응형

 

 

💡솔리디티 컴파일러 설치하기

 

이더리움에서 스마트 컨트랙트를 실행하기 위해서는 솔리디티 코드를 작성하고, solc 라는 솔리디티 컴파일러로 컴파일하여 이더리움 블ㄹ록체인에 배포해야 합니다. 솔리디티 컴파일러(solc)를 설치해보고, 코드를 컴파일 해보도록 하겠습니다.

 

아래 명령어를 입력하여 솔리디티 컴파일러를 설치해주시면 됩니다. 저는 현재 MAC OS를 사용하고 있으니, 이 점 유의해서 봐주시면 좋을 것 같습니다.

 

 💻 우분투 OS

sudo add-apt-repository ppa:ethereum/ethereum
sudo apt update
sudp apt install solc

 

💻 맥 OS

brew update
brew tap ethereum/ethereum
brew install solidity

 

설치가 완료됐다면 버전을 확인해줍니다.

solc --version

 

위 명령어를 입력해 주었을 때, 아래와 같은 출력값을 확인하실 수 있다면 정상적으로 설치가 된 것입니다. (버전 정보는 조금 다를 수 있습니다!)

(base)  eunjaeyoon@Eunjaeui-iMac  ~  solc --version
solc, the solidity compiler commandline interface
Version: 0.8.15+commit.e14f2714.Darwin.appleclang

 

설치가 완료됐다면 예제 코드를 작성해보도록 하겠습니다. 컨크랙트 파일은 파일명.sol 로 작성하면 됩니다.

 

👉 예제 코드

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.4.16 <0.9.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public{
        storedData = x;
    }

    function get() public view returns (uint){
        return storedData;
    }
}

 

위 코드는 set 함수를 이용해 데이터를 저장하고 get 함수를 이용해 저장한 데이터를 반환하는 아주 간단한 컨트랙트입니다.

 

이제 솔리디티 코드를 배포하기 위해 solc를 이용해 컴파일을 해보도록 하겠습니다.

 

solc --optimize --bin {컴파일할 sol 파일 이름}

 

solc --bin {파일 이름} 은 솔리디티 파일을 이진 형식으로 컴파일하는 명령어입니다. --optimize 옵션은 컴파일 전, 작성한 솔리디티 코드가 약 200회 실행된다고 가정했을 때를 기준으로 컨트랙트를 최적화합니다.

 

 

명령어를 실행하고 나면 다음과 같은 16진수 이진코드가 출력되면, 이 이진코드는 우리가 작성한 솔리디티 코드를 컴파일한 결과값이며, EVM은 이 코드를 실행하게 됩니다.

 

 

✓ solc를 사용해 ABI 생성하기

 

ABI는 Application Binary Interface의 약자입니다. 이는 스마트 컨트랙트 코드에 대한 설명이 담긴 JSON 형식의 인터페이스입니다. 이더리움 네트워크에 있는 각 노드들은 지갑을 통해 상호작용 하는데, 이 때 JSON-RPC 형식의 데이터로 상호작용을 하게 됩니다. 이 상호작용을 위한 데이터가 바로 ABI인 것입니다.

 

어떤 노드가 이더리움 네트워크에 올라가있는 스마트 컨트랙트를 실행하고자 할 때, 바이트코드 형태라면 어떤 함수를 어떻게 실행해야 하는지 이해하기 어려울 것입니다. ABI는 스마트 컨트랙트 코드에 있는 함수에 대해 정의하고, 컨트랙트에 있는 함수에 어떤 인자를 넣어야 하는지, 어떤 데이터가 반환되는지 등을 가지고 있으며, 노드가 컨트랙트를 실행하기 위해 어떤 작업을 수행해야 하는지를 알려줍니다. 그럼, solc의 --abi 옵션을 사용하여 컨트랙트의 ABI를 생성해보도록 하겠습니다.

solc --abi simpleStorage.sol

배열을 자세히 살펴보면, 컨트랙트 내 함수에 대한 정보가 객체 형태로 들어이쓴 것을 abi 라는 옵션을 이용해 확인하실 수 있습니다.

반응형

댓글