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的发币逻辑的更多相关文章

  1. 许式伟看 Facebook 发币(上): 区块链, 比特币与 Libra 币

    你好,我是七牛云许式伟. Facebook(脸书)于6月18日发布了其加密数字货币项目白皮书.该数字货币被命名为 Libra(天秤座),象征着平衡与公正.此前,BBC 报道说这个数字货币叫 Globa ...

  2. 以太坊智能合约[ERC20]发币记录

    以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行.本文就智能合约发代币流程作一完整介绍( ...

  3. 使用remix发布部署 发币 智能合约

    Remix是一个基于浏览器的编译器和IDE,使用户能够使用Solidity语言构建以太坊合约并调试事务. 在上一篇文章已经成功的使用代码讲智能合约编译并且发布部署到了链上,可是在部署 发币的智能合约 ...

  4. 【零基础】为什么Facebook发币就不一样

    参考: https://baijiahao.baidu.com/s?id=1637182596912694597&wfr=spider&for=pc https://blog.csdn ...

  5. NGK项目为什么要发币

    每个区块链创新应用的出现,基本都发行了自己的数字货币,像比特币,以太坊等.数字货币是区块链的资产,是区块链技术的一个应用,实现了用区块链传递价值的目的.目前市面上的数字货币林林总总几千种,其中公链发行 ...

  6. EOS token 代币兑换的资料

    eos token 兑换价格预估查询:   https://eosscan.io/ https://steemit.com/eos/@sandwich/how-to-check-which-eos-p ...

  7. [转]EOS智能合约 & 私链激活 & 基本操作

    链接:https://www.jianshu.com/p/90dea623ffdf 简介 本篇文章,将跟大家介绍eos私链的激活.基础智能合约的安装,以及为大家演示转账等基础操作.还没有安装eos私链 ...

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

    关于 EOS的 铸币及发币(以下是精华)                                                                    张永@CoinXP 以下 ...

  9. eos合约案例导读

    为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo -- eosio.token.eosio.token 智能合约目前还不是特别完善,个别功能还没有完成.但这个示 ...

随机推荐

  1. 深入理解Java中停止线程

    一.停止线程会带来什么? 对于单线程中,停止单线程就是直接使用关键字return或者break,但是在停止多线程时是让线程在完成任务前去开启另外一条线程,必须放弃当前任务,而这个过程是不可预测,所以必 ...

  2. linux权限相关操作

    Linux权限管理是Linux中一个十分重要的概念,也是系统安全性的重要保障.这里主要介绍Linux的基本权限和默认权限,通过理论讲解与实验演示,可以详细了解到权限的相关操作及其重要性. 文件权限 [ ...

  3. SharpDevelope 在 Windows 7 SP1 with .net framework4.0 下编译时找不到resgen.exe 解决办法

    如果在vs下编译正常,在SharpDevelope下编译报这个错误,可以更改编译时的.netframework版本和C#版本.在 Tool->Project Upgrade 进行项目转换后,一般 ...

  4. Java day1

    1. 学习java,首先是jdk的安装,JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+ ...

  5. linux上安装memcached步骤

    libevent: http://libevent.org/ 服务器端:https://code.google.com/archive/p/memcached/downloads 客户端: http: ...

  6. 使用setup.py安装python包和卸载python包的方法

    使用setup.py安装python包和卸载python包的方法 记录安装后文件的路径 python setup.py install --record files.txt删除这些文件 cat fil ...

  7. android 监控应用进程

    在android系统中,怎么监控应用的进程改变及消亡呢? 至于监控应用进程能做什么,这个就不多说了,你懂的. 在android系统中有这么一个类ActivityManagerNative,看名称就大概 ...

  8. string formating字符串格式化,function函数,group组,recursion递归,练习

    # -*- coding: UTF-8 -*- msg = 'i am {} my hobby is {}'.format('lhf',18) print(msg) msg1 = 'i am %s m ...

  9. sequelize查询数据的日期格式化

    首先确定时区 const sequelize = new Sequelize(config.database, config.username, config.password, { host: co ...

  10. Makefile知识点总结

    1.=,:=,+=区别 = 是最基本的赋值 := 是覆盖之前的值 ?= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值 .“=” make会将整个makefile展开后,再决定变量的值 ...