eos.token合同简介

Eosio.token,Exchange和Eosio.msig合同

本教程假定您已完成教程“ 合同入门”

在这个阶段,区块链没有太大作用,所以让我们部署eosio.token合同。此合约允许创建许多不同的令牌,这些令牌全部在同一合同上运行,但可能由不同的用户管理。

在我们部署令牌合同之前,我们必须创建一个帐户来部署它。

$ cleos create account eosio eosio.token \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
...

然后我们可以部署可以找到的合同 ${EOSIO_SOURCE}/build/contracts/eosio.token

$ cleos set contract eosio.token build/contracts/eosio.token -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"...

 

创建货币令牌

您可以eosio.token按以下定义查看接口contracts/eosio.token/eosio.token.hpp

   void create( account_name issuer,
                asset        maximum_supply );


   void issue( account_name to, asset quantity, string memo );

   void transfer( account_name from,
                  account_name to,
                  asset        quantity,
                  string       memo );

要创建新标记,我们必须create(...)使用正确的参数调用该操作。此命令将使用最大供应的符号来唯一地标识来自其他令牌的此令牌。发行人将有权发出问题并执行其他操作,例如冻结,召回和列入所有者白名单。

使用位置参数调用此方法的简明方法:

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

或者,使用命名参数调用此方法的更详细的方法:

$ 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授权此电话。

 

将代币发放到帐户“用户”

现在我们已经创建了令牌,发行者可以向user我们之前创建的帐户发放新令牌。如果您尚未创建名为“user”的帐户,请参阅此处的说明。

我们将使用位置调用约定(vs named args)。

$ cleos push action eosio.token issue '[ "user", "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"}

这次输出包含几个不同的操作:一个问题和三个传输。虽然我们签署的唯一行动是issueissue行动执行“内联转移”,“内联转移”通知发件人和收件人帐户。输出指示被调用的所有操作处理程序,调用它们的顺序以及操作是否生成任何输出。

从技术上讲,eosio.token合同本可以跳过,inline transfer并选择直接修改余额。但是,在这种情况下,eosio.token合同遵循我们的令牌约定,该约定要求所有帐户余额可以通过引用它们的转移操作的总和来推导。它还要求通知资金的发送方和接收方,以便它们可以自动处理存款和取款。

如果要查看广播的实际事务,可以使用-d -j选项指示“不广播”和“将事务返回为json”。

$ cleos push action eosio.token issue '["user", "100.0000 SYS", "memo"]' -p eosio@active -d -j
{
  "expiration": "2018-05-25T19:02:58",
  "ref_block_num": 18200,
  "ref_block_prefix": 614206268,
  "max_net_usage_words": 0,
  "max_cpu_usage_ms": 0,
  "delay_sec": 0,
  "context_free_actions": [],
  "actions": [{
      "account": "eosio.token",
      "name": "issue",
      "authorization": [{
          "actor": "eosio",
          "permission": "active"
        }
      ],
      "data": "00000000007015d640420f00000000000453595300000000046d656d6f"
    }
  ],
  "transaction_extensions": [],
  "signatures": [
    "SIG_K1_Khyk1GsxWCx4axqYMF2AREDvaZtZdFaQifNPkR9DomR7toJ4sGua7pMBNq2osV5TY8rcGNcgNwn1eFe3noAXsoUA26HNDJ"
  ],
  "context_free_data": []
}

 

将代币转移到帐户“Tester”

现在该帐户user有令牌,我们会转移一些帐户tester。我们user使用permission参数指示授权此操作-p user@active

$ cleos push action eosio.token transfer \
        '[ "user", "tester", "25.0000 SYS", "m" ]' -p user@active
executed transaction: 06d0a99652c11637230d08a207520bf38066b8817ef7cafaab2f0344aafd7018  268 bytes  1000 cycles
#   eosio.token <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"}
>> transfer
#          user <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"}
#        tester <= eosio.token::transfer        {"from":"user","to":"tester","quantity":"25.0000 SYS","memo":"m"}

 

部署交换合同

与上面显示的示例类似,我们可以部署exchange合同。该exchange合同提供的功能来创建和贸易货币。假设这是从EOSIO源的根目录运行的。

$ cleos create account eosio exchange  \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
executed transaction: 4d38de16631a2dc698f1d433f7eb30982d855219e7c7314a888efbbba04e571c  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"exchange","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJxe...

$ cleos set contract exchange build/contracts/exchange -p exchange@active
Reading WAST/WASM from build/contracts/exchange/exchange.wasm...
Using already assembled WASM...
Publishing contract...
executed transaction: 503dddec456ae301ef467c6a05bc6bf61e1ea21ab911ef6cc6e0750001b675c8  33888 bytes  5841 us
#         eosio <= eosio::setcode               {"account":"exchange","vmtype":0,"vmversion":0,"code":"0061736d0100000001bb022f60067f7e7f7f7f7f00600...
#         eosio <= eosio::setabi                {"account":"exchange","abi":"0e656f73696f3a3a6162692f312e30010c6163636f756e745f6e616d65046e616d650e0...

 

部署Eosio.msig合同

eosio.msig合同允许多方异步签收单交易。EOSIO在基础级别具有多重签名(multisig)支持,但它需要一个同步侧通道,其中数据被传送和签名。 Eosio.msig是一种更加用户友好的方式,在多方同意的情况下异步提议,批准并最终发布交易。

以下步骤可用于部署eosio.msig合同。

$ cleos create account eosio eosio.msig  \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 \
        EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"eosio.msig","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJ...

$ cleos set contract eosio.msig build/contracts/eosio.msig -p eosio.msig@active
Reading WAST/WASM from build/contracts/eosio.msig/eosio.msig.wasm...
Using already assembled WASM...
Publishing contract...
executed transaction: 3433c434bdef42ba2150d5df46c17e0258f20b7836a057911faa2daa66262338  8864 bytes  1319 us
#         eosio <= eosio::setcode               {"account":"eosio.msig","vmtype":0,"vmversion":0,"code":"0061736d010000000198011760017f0060047f7e7e7...
#         eosio <= eosio::setabi                {"account":"eosio.msig","abi":"0e656f73696f3a3a6162692f312e30030c6163636f756e745f6e616d65046e616d650...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值