[EOS 프로그래밍]3. EOS 스마트 컨트랙트와 통신하기

in #kr6 years ago (edited)
이전글
  1. EOS 컴파일하기
  2. 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. 댓글 좀 써주라 ㅠㅠㅠㅠㅠ 외롭다!

Sort:  

[KR-YOUTH] $ 1 보팅 지원 (월요일)


댓글을 작성하고 싶어도 개발자가 아니라서 무슨 말을 해야할지 모르겠어요.ㅠㅠ

무슨 말을 할지 모를 땐 웃으면 된다는 명언이 있습니다.

군대 간 크립토님은 어디 있을까?(웃음) [정확히 아이디 까먹음ㅋㅋㅋㅋ]

군인이시니 군에 계시겠죠... 안계시면 큰일남 -0- hellocrypto 랍니다.

개발자 한 명 소환 @maanya !!!

Coin Marketplace

STEEM 0.18
TRX 0.16
JST 0.031
BTC 61236.82
ETH 2672.65
USDT 1.00
SBD 2.61