EOS的发币逻辑

Posted tekkaman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EOS的发币逻辑相关的知识,希望对你有一定的参考价值。

EOS的发币逻辑

  EOS官网的Guide中(参考[1]),描述了如何发自己的Token:

    1、创建一个contract。

    2、有一些create、transfer、close action。

    3、发布,调用一下create,即发行了一种币。

 

  发完币后,可以通过cleos命令,获取发币信息:

cleos get currency stats issuer symbol
cleos get currency balance issuer user1 symbol

 

  但是官方文档并没有说明,为什么发布一个contract,调用一下create action,就算发币了,并且cleos也能查询出结果。

  cleos将查询发送给 nodeos,由nodeos执行实际的查询。一个contract要符合怎样的条件,才能让 nodeos知道这是一个发币合约呢?此处可以有多种猜测:

    1、通过合约名吗?合约命名使用 "eosio.token" 标识了,使得 nodeos 知道这一个发币合约?

      技术分享图片

    2、通过action吗?只要同时拥有 create、issue、retire、transfer、open、close 这些action,nodeos认为这是一个发币合约?

      技术分享图片

  3、还是其它原因?

 

  经过研究后,结论是3,其它原因。

get currency stats

  当执行 cleos get currency stats issuer symbol 时,请求最终将被发送到 chain_plugin,由chain_plugin执行。看一下相关代码:

    技术分享图片

  get_currency_stats 的实现主法,最给通过调用 walk_key_value_table 来实现功能。

  这里调用的含义是:查询 p.code 账户下 scope 域下的 "stat"表。并且找到后,将表中的 supply、max_supply、issuer字段返回。

 

  再看一下 eosio.token.hpp,发现我们的合约中确实定义了一个 stat 表。

    技术分享图片

  而 stat 表结构里,刚好有 supply、max_supply、issuer 三个字段。

 

  至此,事实已经非常清楚了。只要合约中满足以下条件,就能成功调用 cleos get currency stats issuer1 symbol。

    1、定义了名为 "stat"的表

    2、表中有 supply、max_supply、issuer 三个字段。

get currency balance

  再来看一下 get_currency_balance 的实现。

    技术分享图片

  遍历 p.code 账户 p.account 域 "accounts" 表,将唯一个数据解释成 asset。

  再看一下 eosio.contract 中的实现。实现了一个名为"accounts"的表,并且表结构中只有一个 asset 类型的字段。

    技术分享图片

  

  至此,也非常清楚了。只要合约中满足以下条件,就能成功调用 cleos get currency balance issuer1 user1 symbol。

    1、定义了名为 "accounts"的表

    2、表中只有一个字段,类型为 asset。

 

参考:

1、https://developers.eos.io/eosio-home/docs/token-contract

 

以上是关于EOS的发币逻辑的主要内容,如果未能解决你的问题,请参考以下文章

学了3天EOS, 其它没学会,就学会了发私人数字币

来自以太坊V神的反击:Sharding is coming

EOS的开发流程

EOS 智能合约案例解析

BSC发币教程币安发币教程8代推广机制的通缩分红销毁的智能合约发币教程

智能合约实战 solidity 语法学习 11 [ 以太坊发币 验证合约 体验下过程 ] 附代码