2.2 部署,发布和转移数字货币

第一步:获取合约来源

导到您的合同目录。

cd CONTRACTS_DIR

获取来源

git clone https://github.com/EOSIO/eosio.contracts

这个存储库包含几个合同约,但是现在我们将重点关注eosio.tokencontract。 因此需导到该目录。

cd eosio.contracts/eosio.token

第二步:为合约创建账户

在我们部署数字货币合约之前,我们必须创建一个帐户来部署它,我们需要使用到该帐户的eosio开发密钥。
在此之前,你需要先解锁你的钱包。

cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

第三步:编译合约

ABI已经被包含,无需再次生产

eosio-cpp -o eosio.token.wasm src/eosio.token.cpp

第四步:部署合约

cleos set contract eosio.token CONTRACTS_DIR/eosio.contracts/eosio.token --abi abi/eosio.token.abi -p eosio.token@active

结果:

Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 528bdbce1181dc5fd72a24e4181e6587dace8ab43b2d7ac9b22b2017992a07ad 8708 bytes 10000 cycles
## eosio <= eosio::setcode {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d0100000001ce011d60067f7e7f7f7f7f00...
## eosio <= eosio::setabi {"account":"eosio.token","abi":{"types":[],"structs":[{"name":"transfer","base":"","fields":[{"name"...

第五步:创建数字货币

要创建新标记,我们必须使用正确的参数调用create(…)操作。 此操作接受1个参数,它是一个symbol_name类型,由两个数据组成,float及仅带大写字母字符的symbol_name,例如“1.0000 SYM”。 发行人将有权声明发行并执行其他操作,例如冻结,召回和列入所有者白名单。
下面是使用参数调用此方法的简明方法:

cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS"]' -p eosio.token@active

另一种方法使用命名参数:

cleos push action eosio.token create '{"issuer":"eosio", "maximum_supply":"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"}

此命令创建了一个新的数字货币SYS,其精度为4个十进制,最大供应量为1000000000.0000个SYS。
为了创建这个数字货币,我们需要eosio.token合约的许可,因为它“拥有”符号命名空间(例如“SYS”)。 该合约的未来版本可能允许其他方自动购买符号名称。 出于这个原因,我们必须通过-p eosio.token@active来授权。

第六步:发行货币

现在我们已经创建了货币,发行者可以向我们之前创建的“alice”帐户发放新货币。

cleos push action eosio.token issue '[ "alice", "100.0000 SYS", "memo" ]' -p eosio@active

这次输出包含几个不同的操作:一次发行和三次传输。 虽然我们仅署名了发行,但发行这个操作执行了“内联转移”,“内联转移”通知了发起人和接收人帐户。 输出结果说明被调用的所有操作处理程序,调用顺序以及是否有结果产出均是由发行这一操作决定的。
从技术上讲,eosio.token合约可能会跳过内联转移,并选择直接修改余额。 但是,在这种情况下,eosio.token合约遵循我们的数字货币约定,该约定要求所有帐户余额可以通过引用它们的传输操作的总和来推导。 它还要求资金的发起方和接收方能接收到通知,以便它们可以自动处理存款和取款。
检查交易时,可以使用-d -j指令,它们分别表示“不要广播”和“将事务返回为json”,这在开发过程中可能会有用。

cleos push action eosio.token issue '["alice", "100.0000 SYS", "memo"]' -p eosio@active -d -j

第七部:转移数字货币

既然账户alice已经发行了货币,我们可以转移一些至账户bob上。 我们之前说明账户alice使用权限参数-p alice @ active授权此操作。

cleos push action eosio.token transfer '[ "alice", "bob", "25.0000 SYS", "m" ]' -p alice@active

们现在检查帐号“bob”是否使用cleos获得货币。

cleos get currency balance eosio.token bob SYS
25.00 SYS

如果我们检查“alice”的余额,我们会发现数字货币已从帐户中扣除。

cleos get currency balance eosio.token alice SYS
75.00 SYS

原文链接:https://developers.eos.io/eosio-home/docs/token-contract