- 이더리움에서 스마트 컨트랙트를 실행하기 위해서는 솔리디티 코드를 작성하고, solc라는 솔리디티 컴파일러로 컴파일하여 이더리움 블록체인에 배포합니다.
- 솔리디티 컴파일러를 설치하고, 직접 코드를 컴파일 합니다.
1. 솔리디티 컴파일러 설치
> sudo add-apt-repository ppa:ethereum/ethereum
> sudo apt update
> sudo apt install solc
> brew update
> brew tap ethereum/ethereum
> brew install solidity
2. 컴파일러 버전 확인
> solc --version
solc, the solidity compiler commandline interface
Version: 0.8.10+commit.fc410830.Darwin.appleclang
- 위와 같은 결과가 나오면 정상적으로 설치된 것입니다.
3. 예제 코드 작성
- SimpleStorage.sol 코드를 작성해보겠습니다
// SPDX License Identifier: MIT
pragma solidity ^0.8.7;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
- simpleStorage.sol은 set 함수를 이용해 데이터를 저장하고, get 함수를 이용해 저장한 데이터를 반환하는 아주 간단한 컨트랙트
4. 솔리디티 코드 컴파일
- 솔리디티 코드를 배포하기 전에 solc를 사용해서 컴파일 합니다
- 해당 디렉토리에서 다음 명령어를 실행
> solc --optimize --bin simpleStorage.sol
- solc --bin {컴파일할 sol파일 이름} 은 솔리디티 파일을 이진 형식으로 컴파일하는 명령어
- --optimize 옵션은 컴파일 전, 작성한 솔리디티 코드가 약 200회 실행된다고 가정했을 때를 기준으로 컨트랙트를 최적화
- 명령어를 실행하고 나면 다음과 같은 16진수 이진코드가 출력됩니다.

- 이 이진코드는 우리가 작성한 솔리디티 코드를 컴파일한 결과값이며, EVM은 이 코드를 실행합니다.
5. solc를 사용해 ABI 생성
- ABI(Application Binary Interface)는 스마트 컨트랙트 코드에 대한 설명이 담긴 JSON 형식의 인터페이스
- 이더리움 네트워크에 있는 각 노드들은 지갑을 통해 상호작용 하는데, 이 때 JSON-RPC 형식의 데이터로 상호작용을 합니다
- 이 상호작용을 하기 위한 것이 ABI
- 어떤 노드가 이더리움 네트워크에 올라가있는 스마트 컨트랙트를 실행하고자 할 때, 바이트코드 형태라면 어떤 함수를 어떻게 실행해야 하는지 이해하기 어려울 것입니다
- ABI는 스마트 컨트랙트 코드에 있는 함수에 대해 정의하고, 컨트랙트에 있는 함수에 어떤 인자를 넣어야 하는지, 어떤 데이터가 반환되는지 등을 가지고 있으며, 노드가 컨트랙트를 실행하기 위해 어떤 작업을 수행해야 하는지 알려줍니다
- solc의 --abi 옵션을 사용하여 컨트랙트의 ABI를 생성해봅시다
- 다음의 명령어를 사용합니다
solc --abi simpleStorage.sol
- 명령어가 정상적으로 실행되면 다음과 같은 배열이 출력됩니다.

- 배열을 자세히 살펴보면, 컨트랙트 내 함수에 대한 정보가 객체 형태로 들어있는 것을 확인할 수 있습니다.
