ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • EOS 스마트 컨트랙트 개발환경 구축
    Blockchain 2018. 11. 26. 00:08

    스마트 컨트랙트를 발행하기 전에, 개발환경 설정을 해야 합니다.



    contracts 라는 이름의 작업할 디렉토리를 생성하고 경로를 복사합니다.

    mkdir contracts
    cd contracts
    pwd | pbcopy



    docker로 eos를 설치하고 실행합니다.

    docker pull eosio/eos:v1.4.2
     
    docker run --name eosio \
      --publish 7777:7777 \
      --publish 127.0.0.1:5555:5555 \
      --volume /Users/baekchangmyeong/contracts:/Users/baekchangmyeong/contracts \
      --detach \
      eosio/eos:v1.4.2 \
      /bin/bash -c \
      "keosd --http-server-address=0.0.0.0:5555 & exec nodeos -e -p eosio --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::http_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:7777 --access-control-allow-origin=* --contracts-console --http-validate-host=false --filter-on='*'"


    CDT를 설치합니다. CDT는 Contract Development Toolkit의 약자로 스마트 컨트랙트 관련 코드를 작성하고 ABI를 생성하기 위해 사용됩니다.

    CDT는 OS X와 Linux Debian, RPM 패키지를 지원합니다.


    운영체제에 맞는 명령어로 설치/제거합니다.

    # OS X Install
    brew tap eosio/eosio.cdt
    brew install eosio.cdt
     
    # OS X Uninstall
    brew remove eosio.cdt
     
    # Ubuntu Debian Install
    wget https://github.com/eosio/eosio.cdt/releases/download/v1.3.2/eosio.cdt-1.3.2.x86_64.deb
    sudo apt install ./eosio.cdt-1.3.2.x86_64.deb
     
    # Ubuntu Debian Uninstall
    sudo apt remove eosio.cdt
     
    # CentOS/Redhat (RPM) Install
    wget https://github.com/eosio/eosio.cdt/releases/download/v1.3.2/eosio.cdt-1.3.2.x86_64-0.x86_64.rpm
    sudo yum install ./eosio.cdt-1.3.2.x86_64-0.x86_64.rpm
     
    # CentOS/Redhat (RPM) Uninstall
    sudo yum remove eosio.cdt




    cleos를 .bash_rc 또는 .bash_profile에 등록하거나 aliasing 합니다.

    aliasing해서 하도록 하겠습니다.

    alias cleos='docker exec -it eosio /opt/eosio/bin/cleos --url http://127.0.0.1:7777 --wallet-url http://127.0.0.1:5555'



    컨트랙트를 발행해 보기 전에 EOS의 컴포넌트에 대해 이해하고, 어떻게 상호작용을 하는지 알 필요가 있습니다.


    nodeos: 블록 생산과 API 통신을 맡는 EOS 코어입니다. 대부분 cleos로 접근합니다.

    cleos: Command-line으로 블록체인과 상호작용하고, 월렛을 관리합니다.

    keosd: 키를 저장하고 지갑 데이터를 안전하게 관리하도록 합니다. 대부분 cleos로 접근합니다.


    구조를 시각화하면 이렇게 됩니다. (EOS 공식문서 캡처)






    스마트 컨트랙트를 배포하기 위해서는 지갑이 필요합니다.

    cleos wallet create 명령으로 지갑을 생성할 수 있습니다.


    --to-console 옵션을 사용하면 지갑의 키가 Bash에 나타나게 되는데 이는 Bash History에 남을 수 있으므로 보안에 좋지 않습니다.

    라이브 환경에서 생성하는 것이라면 --to-file 옵션을 사용해야 합니다.

    cleos wallet list 명령으로 생성된 지갑을 확인할 수 있습니다.

    cleos wallet create --to-console



    지갑키는 나중에 사용해야 하므로 복사하여 다른 곳에 저장해 둡니다.

    cleos wallet open으로 방금 만든 default 지갑을 열 수 있습니다.

    cleos wallet open



    지갑을 열었지만 잠겨있는 상태입니다.

    unlock으로 지갑을 언락할 수 있습니다.

    명령어를 치면 지갑의 키를 요구하는데 방금 전에 저장해 둔 키를 사용하면 해결됩니다.

    cleos wallet unlock



    언락을 했으면 지갑에 키를 임포트합니다.

    명령어를 사용하면 prefix가 EOS인 공개키가 나타납니다.

    cleos wallet create_key



    개인키는 private_keys 명령어로 확인하여 저장해 둡니다.

    cleos wallet private_keys


    eosio 사용자의 개발키를 임포트 합니다.

    eosio 사용자는 모든 새로운 블록체인에 존재하는 유저로 합의를 지시하는 시스템 컨트랙트를 로드하여 체인을 설정하는 데에 사용됩니다.

    eosio 사용자는 체인이 설정되면 상실됩니다.

    개발키는 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 로 픽스되어 있습니다. 이 키를 라이브 account에 사용하면 당연히 안 됩니다.

    cleos wallet import
    private key: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3




    이제 만든 지갑을 이용해서 계정을 생성합니다.

    EOS에서 계정은 블록체인에 저장되고, 사람을 식별하는 데에 사용됩니다.

    계정이 없으면 트랜잭션을 broadcast 할 수 없습니다.

    cleos create account eosio changmyeong {PublicKey}


Designed by Tistory.