[EOS 프로그래밍]3. EOS 스마트 컨트랙트와 통신하기
이전글
오늘부터 프로그래밍에 관련된 지식을 필요로 합니다. C/C++을 컴파일하는 웹어셈블리 기반인 스마트 컨트랙트이므로 C/C++ 관련 지식이 필요로 합니다.
#1 명령
EOS는 Ethereum과 달리 일반 사용자 계정과 스마트 컨트랙트 계정의 구분이 없습니다.
그래서 계정을 만들고 스마트 컨트랙트를 입히는 방법으로 만듭니다.
cleos set contract eosio contracts/eosio.bios -p eosio
cleos set contract eosio.token contracts/eosio.token -p eosio.token
cleos set contract
는 계정 하나에 하나의 스마트 컨트랙트를 입히는 명령어입니다.
cleos set contract 계정명 '스마트 컨트랙트 위치' [-p 계정 권한, 주로 앞에 계정명에 자동으로 매칭됨으로 필요할 때만 씀]
와 같은 순서로 지정됩니다. [] 괄호 안에 있는 것은 비필수적 요소입니다.
그리고 설정된 스마트 컨트랙트와 통신하기 위해서는 스마트 컨트랙트에 어떤 함수로 통신하는지 알고 있어야 하는데....
여기서 부터 난이도가 급상승합니다! 글 첫머리에 달아놓은 경고문을 주의하시요!
eosio.token의 스마트 컨트랙트를 알아볼려면 eos의 git 풀더(git clone 명령으로 생성된 풀더)의 contracts 풀더로 가서
eosio.token/eosio.token.hpp 를 확인하면
void create( account_name issuer,
asset maximum_supply,
uint8_t can_freeze,
uint8_t can_recall,
uint8_t can_whitelist );
void issue( account_name to, asset quantity, string memo );
void transfer( account_name from, account_name to, asset quantity, string memo );
한 클래스 내에 세 계의 함수가 있는 것을 확인을 할 수 있습니다.
eosio.token/eosio.token.cpp 에서는 마지막에 EOSIO_ABI 매크로를 통해 해당 클래스를 맵핑하는 것도 확인할 수 있습니다.
cleos push action eosio.token create '[ "eosio", "100000000000.0000 EOS", 0, 0, 0]' -p eosio.token
cleos push action eosio.token issue '[ "eosio", "100.0000 EOS", "memo"]' -p eosio
cleos push action eosio.token transfer '[ "eosio", "user", "100.0000 EOS", "memo"] -p eosio
전에 나왔던 마지막 설명할 시간 없다고 했던 명령어들 입니다.
그런데 저것들 중 함수명과 닮은 부분이 있는 것 같지 않나요?
아 몰론 클래스만 상속해서 짠다고 되는게 아니라 abi 포맷으로 만들어야 하는데 EOSIO_ABI 매크로가 하는 일입니다. 일단은 설명은 하지 않겠습니다.
cleos push action
명령어는 사용법으로는 스마트 컨트랙트 계정, 함수명, ' ' 로 패킹한 인수와 '-p' 권한 설정 (이제는 필수)의 순서로 지정합니다.
eosio.token 에서는 create로 토큰의 한계를 설정하고 issue를 통해 사용가능한 토큰으로 변환합니다. 그리고 transfer로 전송합니다.
이제 직접 user 계정에서 test 계정으로 토큰을 전송해보세요!
특이점으로는 asset이 숫자 토큰이름
의 형식으로 지정됩니다. 정수로 되는게 아닙니다.
#2 Action과 Transaction
eos 에서는 트랜젝션이 하나의 일을 처리하는 것이 아닙니다.
트랜젝션이 액션들의 집합으로써 한번에 많은 일을 처리할 수 있습니다.
그런데 액션을 호출하면 하나의 트랜젝션에 집어넣는 것이라 별 문제는 없습니다.
복잡한 Dapp을 설계할 때 쓰이는 개념으로 예상되고 있다는 것만 알아두세요.
#3 다음 예고
필수 스마트 컨트랙트 들을 적용하는 것을 적을 것 같은데
휴재 대신(1일 1스팀 연재 보팅지원 걸려서 @onehand) 월요병(사실 상 연재 시점 화요일 오전 1시 LOL) 기념으로 선유기지( @seonyu-base)에 쳐들어가는 이야기 쓸려고 하는데... 스달이 될 지 궁금하다ㅋㅋㅋㅋㅋ
ps. 댓글 좀 써주라 ㅠㅠㅠㅠㅠ 외롭다!
[KR-YOUTH] $ 1 보팅 지원 (월요일)
댓글을 작성하고 싶어도 개발자가 아니라서 무슨 말을 해야할지 모르겠어요.ㅠㅠ
무슨 말을 할지 모를 땐 웃으면 된다는 명언이 있습니다.
군대 간 크립토님은 어디 있을까?(웃음) [정확히 아이디 까먹음ㅋㅋㅋㅋ]
군인이시니 군에 계시겠죠... 안계시면 큰일남 -0- hellocrypto 랍니다.
개발자 한 명 소환 @maanya !!!