이더리움 솔리디티

0

블록체인

목록 보기
1/5

이더리움 EVM과 Solidity

이더리움 EVM에서 스마트 컨트랙트가 어떻게 작동하는지 배우고 Solidity 문법에 대해 배웁니다.

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

1.우분투 설치

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

2.버전 확인

1
solc --version
  1. 예제 코드 작성

    solc_practice라는 폴더를 만들고, 폴더 안에 simpleStorage.sol 파일을 만듭니다.

    그리고 simpleStorage.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;
        }
    }

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

    지금은 당장 코드를 이해할 필요가 없습니다. 이렇게 코드를 작성하는구나, 정도로 이해하고 넘어가셔도 좋습니다.

    솔리디티 코드 컴파일

    이제 솔리디티 코드를 배포하기 위해 solc를 사용해 컴파일을 해봅시다.

    ../solc_practice 디렉토리로 들어가, 다음의 명령어를 입력합니다.

    1
    solc --optimize --bin simpleStorage.sol

    solc --bin {컴파일할 sol파일 이름} 은 솔리디티 파일을 이진 형식으로 컴파일하는 명령어입니다.

    • -optimize 옵션은 컴파일 전, 작성한 솔리디티 코드가 약 200회 실행된다고 가정했을 때를 기준으로 컨트랙트를 최적화합니다.

    명령어를 실행하고 나면 다음과 같은 16진수 이진코드가 출력됩니다.

    이 이진코드는 우리가 작성한 솔리디티 코드를 컴파일한 결과값이며, EVM은 이 코드를 실행합니다.

    solc를 사용해 ABI 생성하기

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

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

    solc의 --abi 옵션을 사용하여 컨트랙트의 ABI를 생성해봅시다.

    다음의 명령어를 입력합니다.

    1
    solc --abi simpleStorage.sol

    명령어가 정상적으로 실행되면 다음과 같은 배열이 출력됩니다.

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

    **이더리움 개발 환경 구성 - Remix**

    VSCode를 비롯한 Atom, IntelliJ 등은 우리가 일반적으로 사용하는 데스크톱 IDE에서는 자체적으로 솔리디티 코드를 디버깅하거나 컴파일하는 기능이 없습니다. 따라서 솔리디티 코드를 컴파일, 배포, 테스트, 디버깅 해주는 Truffle과 로컬 환경에 블록체인 테스트넷을 사용할 수 있게 해주는 Ganache를 함께 사용해야 합니다.

    웹 기반 IDE인 Remix는 솔리디티 개발을 위한 IDE입니다. 자체적으로 솔리디티 개발을 위한 컴파일, 배포, 테스트, 디버깅 기능을 내장하고 있기 때문에 별도의 프레임워크나 라이브러리를 설치하지 않아도 쉽게 솔리디티 코드 작성부터 테스트넷 배포까지 할 수 있습니다.

    이번 콘텐츠에서는 Remix의 사용법을 익혀봅니다. 컨트랙트 코드를 작성하고, 컴파일 및 배포를 진행합니다.

    remix.ethereum.org에 접속 !

    파일 생성 및 코드 작성

    1. 새로운 파일을 만듭니다. contracts 폴더 아래 simpleStorage.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;
        }
        // set함수을 이용하여 데이터저장
    
        function get() public view returns (uint) {
            return storedData;
        }
    }
        // get 함수을이용하여 데이터를 반환

    컨트랙트 코드 컴파일

    1. simpleStorage.sol 파일을 열어둔 상태에서, 두번째 탭인 "SOLIDITY COMPILER" 탭을 들어갑니다. 아래의 그림에 알맞게 옵션이 선택되었는지 확인합니다.

      각 옵션에 대해 알아봅시다.

      • "COMPILER": 솔리디티 코드를 어떤 버전으로 컴파일할 것인지 지정할 수 있습니다. 우리는 0.8.7 버전을 선택합니다.
      • "LANGUAGE": 어떤 언어를 컴파일 하는지 지정합니다. 우리는 Solidity를 선택합니다.
      • "EVM VERSION": EVM은 버전에 따라 각기 다른 특징을 가지고 있습니다. byzantium이 디폴트 값입니다.

        다양한 EVM 버전에 대해서는 솔리디티 공식 문서를 참고하세요.

    2. "compile simpleStorage.sol" 버튼을 누르면 솔리디티 파일에 대한 컴파일이 시작됩니다.

    3. 컴파일이 완료되면 "CONTRACT" 옵션에 우리가 만든 컨트랙트가 컨트랙트명(파일명) 형식으로 출력됩니다.

    4. "Compilation Details" 버튼을 누르면 컨트랙트에 대한 메타데이터 및 ABI 데이터, 바이트코드를 확인할 수 있습니다.

    "CONTRACT" 밑에 ABI와 바이트코드를 바로 복사하여 확인할 수도 있습니다.

    컨트랙트 코드 배포

    1. simpleStorage.sol 파일을 열어둔 상태에서, 세번째 탭인 "DEPLOY & RUN TRANSACTIONS" 탭을 들어갑니다. 아래의 그림에 알맞게 옵션이 선택되었는지 확인합니다.

0개의 댓글