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的发币逻辑的更多相关文章
- 许式伟看 Facebook 发币(上): 区块链, 比特币与 Libra 币
你好,我是七牛云许式伟. Facebook(脸书)于6月18日发布了其加密数字货币项目白皮书.该数字货币被命名为 Libra(天秤座),象征着平衡与公正.此前,BBC 报道说这个数字货币叫 Globa ...
- 以太坊智能合约[ERC20]发币记录
以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行.本文就智能合约发代币流程作一完整介绍( ...
- 使用remix发布部署 发币 智能合约
Remix是一个基于浏览器的编译器和IDE,使用户能够使用Solidity语言构建以太坊合约并调试事务. 在上一篇文章已经成功的使用代码讲智能合约编译并且发布部署到了链上,可是在部署 发币的智能合约 ...
- 【零基础】为什么Facebook发币就不一样
参考: https://baijiahao.baidu.com/s?id=1637182596912694597&wfr=spider&for=pc https://blog.csdn ...
- NGK项目为什么要发币
每个区块链创新应用的出现,基本都发行了自己的数字货币,像比特币,以太坊等.数字货币是区块链的资产,是区块链技术的一个应用,实现了用区块链传递价值的目的.目前市面上的数字货币林林总总几千种,其中公链发行 ...
- EOS token 代币兑换的资料
eos token 兑换价格预估查询: https://eosscan.io/ https://steemit.com/eos/@sandwich/how-to-check-which-eos-p ...
- [转]EOS智能合约 & 私链激活 & 基本操作
链接:https://www.jianshu.com/p/90dea623ffdf 简介 本篇文章,将跟大家介绍eos私链的激活.基础智能合约的安装,以及为大家演示转账等基础操作.还没有安装eos私链 ...
- 学了3天EOS, 其它没学会,就学会了发私人数字币
关于 EOS的 铸币及发币(以下是精华) 张永@CoinXP 以下 ...
- eos合约案例导读
为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo -- eosio.token.eosio.token 智能合约目前还不是特别完善,个别功能还没有完成.但这个示 ...
随机推荐
- CentOS磁盘满了,导致磁盘无法写入,这么清理
输入命令 du -sh /* | sort -nr 会列出根目录文件夹的大小 看到哪个文件夹比较大 删除相应的缓存,重启服务器即可
- Windows7下安装python3.6.3
官网下载即可!看清自己的电脑是32还是64! 分享一个网速慢同学可下载网址:https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fpython 1.p ...
- Golang基础之函数
golang基础之函数 1.为什么需要函数? 有些相同的代码可能出现多次,如果不进行封装,那么多次写入到程序中,会造成程序冗余,并且可读性降低 2.什么是函数 为完成某些特定功能的程序指令集合称为函数 ...
- C++学习(四十)(C语言部分)之 学生管理系统设计
涉及到的:指针申请内存 结构体数据结构部分排序文件操作 vs2013数据结构 排序 结构体 指针 功能:1.人工录入信息2.删除3.查找4.修改5.全部显示6.文件的读取和保存7.排序 设计:学生信息 ...
- 嵌入式Linux内核tasklet机制(附实测代码)
Linux 中断编程分为中断顶半部,中断底半部 中断顶半部: 做紧急,耗时短的事情,同时还启动中断底半部. 中断底半部: 做耗时的事件,这个事件在执行过程可以被中断. 中断底半部实现方法: taskl ...
- Spring Boot/Spring Cloud
104.什么是 spring boot? 在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring.SpringMvc框架等,Spring的核心内容在于控制反转(IOC) ...
- python unittest setUp 和 setUpClass 区别
import unittest class Test(unittest.TestCase): def setUp(self): print("start!=======") def ...
- c# 判断时间是否在 某一时间段内
protected bool getTimeSpan(string timeStr) { //判断当前时间是否在工作时间段内 string _strWorkingDayAM = "08:30 ...
- 【java】接口
class :用于定义类interface:用于定于接口 接口定义时,特点:1.接口中常见定义:常亮和抽象方法2.接口中的成员都有固定修饰符(如果没有会被隐式添加) 常量:public static ...
- Python模块 os和sys
os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相 ...