-
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}