导航到你的contracts
目录。git
cd CONTRACTS_DIR
拉取源:github
git clone https://github.com/EOSIO/eosio.contracts --branch v1.4.0 --single-branch
这个存储库包含几个合约,但如今重要的是eosio.token
合约,导航到该目录。json
cd eosio.contracts/eosio.token
在咱们部署代币合约以前,咱们必须建立一个账户来部署它,咱们将为该账户使用eosio开发密钥。segmentfault
你可能必须首先解锁你的钱包!
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
eosio-cpp -I include -o eosio.token.wasm src/eosio.token.cpp --abigen
cleos set contract eosio.token CONTRACTS_DIR/eosio.contracts/eosio.token --abi eosio.token.abi -p eosio.token@active
响应:code
Reading WASM from ... Publishing contract... executed transaction: 69c68b1bd5d61a0cc146b11e89e11f02527f24e4b240731c4003ad1dc0c87c2c 9696 bytes 6290 us # eosio <= eosio::setcode {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d0100000001aa011c60037f7e7f0060047f... # eosio <= eosio::setabi {"account":"eosio.token","abi":"0e656f73696f3a3a6162692f312e30000605636c6f73650002056f776e6572046e61... warning: transaction executed locally, but may not be confirmed by the network yet ]
要建立新代币,请使用正确的参数调用create(...)
操做,此操做接受1个参数,它是一个symbol_name
类型,由两个数据组成,最大供应的浮点数和仅大写字母字符的symbol_name
,例如“1.0000 SYM”,发行人将是有权要求发行或执行其余操做,如冻结、召回和列入全部者的白名单。token
下面是使用位置参数调用此方法的简明方法:开发
cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS"]' -p eosio.token@active
响应:部署
executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12 120 bytes 1000 cycles # eosio.token <= eosio.token::create {"issuer":"eosio","maximum_supply":"1000000000.0000 SYS"}
另外一种方法使用命名参数:get
cleos push action eosio.token create '{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' -p eosio.token@active
响应:it
executed transaction: 0e49a421f6e75f4c5e09dd738a02d3f51bd18a0cf31894f68d335cd70d9c0e12 120 bytes 1000 cycles # eosio.token <= eosio.token::create {"issuer":"eosio","maximum_supply":"1000000000.0000 SYS"}
此命令建立了一个新的代币SYS
,其精度为4位小数,最大供应量为1000000000.0000 SYS,要建立此代币,须要得到eosio.token
合约的许可,所以,传递了-p eosio.token@active
以受权请求。
发行者能够向以前建立的“alice”账户发放新代币。
cleos push action eosio.token issue '[ "alice", "100.0000 SYS", "memo" ]' -p eosio@active
响应:
executed transaction: 822a607a9196112831ecc2dc14ffb1722634f1749f3ac18b73ffacd41160b019 268 bytes 1000 cycles # eosio.token <= eosio.token::issue {"to":"user","quantity":"100.0000 SYS","memo":"memo"} >> issue # eosio.token <= eosio.token::transfer {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"} >> transfer # eosio <= eosio.token::transfer {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"} # user <= eosio.token::transfer {"from":"eosio","to":"user","quantity":"100.0000 SYS","memo":"memo"}
此次输出包含几个不一样的操做:一个发行和三个转移,虽然签名的惟一操做是issue
,但issue
操做执行了“内联转移”,“内联转移”通知了发件人和收件人账户,输出指示被调用的全部操做处理程序、调用它们的顺序以及操做是否生成任何输出。
从技术上讲,eosio.token
合约可能会跳过inline transfer
并选择直接修改余额,可是,在这种状况下,eosio.token
合约遵循咱们的代币约定,该约定要求全部账户余额能够经过引用它们的转移操做的总和来推导,它还要求通知资金的发送方和接收方,以便它们能够自动处理存款和取款。
要检查交易,请尝试使用-d -j
选项,它们表示“不要广播”和“将交易返回为json”,这在开发过程当中可能会有用。
cleos push action eosio.token issue '["alice", "100.0000 SYS", "memo"]' -p eosio@active -d -j
如今alice
账户已经发行了代币,将其中一些转移到账户bob
,以前使用参数-p alice@active
表示alice
受权此操做。
cleos push action eosio.token transfer '[ "alice", "bob", "25.0000 SYS", "m" ]' -p alice@active
响应:
executed transaction: 06d0a99652c11637230d08a207520bf38066b8817ef7cafaab2f0344aafd7018 268 bytes 1000 cycles # eosio.token <= eosio.token::transfer {"from":"alice","to":"bob","quantity":"25.0000 SYS","memo":"Here you go bob!"} >> transfer # user <= eosio.token::transfer {"from":"alice","to":"bob","quantity":"25.0000 SYS","memo":"Here you go bob!"} # tester <= eosio.token::transfer {"from":"alice","to":"bob","quantity":"25.0000 SYS","memo":"Here you go bob!"}
如今使用cleos get currency balance
检查“bob”是否得到代币。
cleos get currency balance eosio.token bob SYS 25.00 SYS
检查“alice”的余额,注意从账户中扣除了代币。
cleos get currency balance eosio.token alice SYS 75.00 SYS