eosio.token 智能合约介绍
一、目的
eosio.token系统合约定义了允许用户为基于EOSIO的区块链创建、发行和管理代币的结构和操作,它演示了一种实现允许创建和管理代币的智能合约的方法。本文详细介绍了eosio.token系统合约并在本地测试链上实际发行了代币进行演示,适用于EOS智能合约的初级开发人员,熟悉如何进行代币的创建、发行和转移。
二、概述
(一)合约数据结构简介
eosio.token合约通过使用两个内部多索引结构管理代币、账户及其相应余额的集合:accounts和 stats。accounts多索引表的每一行都包含account对象的实例,而account对象包含有关一个代币余额的信息。accounts表的范围是一个eosio帐户,它根据代币的符号对行进行索引。这意味着当一个人在 accounts多索引表中查询一个账户名时,结果是该账户目前持有的所有代币。
类似地,stats多索引表为每一行保存currency_stats对象的实例,其中包含有关当前供应量、最大供应量和符号代币的创建者帐户的信息。stats表的范围是代币符号。因此,当查询stats表中的代币符号时,如果查询的符号代币先前已创建,则结果是对应于查询符号代币的单个条目/行,否则为空。
(二)合约方法简介
eosio.token 合约定义了create、issue、retire、transfer、open、close 共六个action供用户创建和管理代币。
三、环境准备
(一)一条正在运行且可访问的区块链
中移链(基于EOS)测试环境搭建
https://mp.weixin.qq.com/s?__biz=MzkwNjI1OTg1MA==&mid=2247489304&idx=2&sn=6d22be6194d821dbd04f6079c79930a3&scene=21#wechat_redirect
(二)确保本地钱包已打开并解锁
如何创建钱包:
https://developers.eos.io/manuals/eos/latest/cleos/how-to-guides/how-to-create-a-wallet图片
四、合约方法
(一)create
Type: void
允许issuer帐户在maximum_supply的供应中创建代币。如果验证成功,将在statstable中为代币符号范围创建一个新条目。

(二)issue
Type: void
此 action 向 to 帐户发放 quantity 代币。

(三)retire
Type: void
与create操作相反,如果所有验证都成功,则会扣除statstable.supply金额。

(四)transfer
Type: void
允许from账户将quantity代币转移到to账户。一个账户被记入借方,另一个账户被记入quantity代币的贷方。

(五)open
Type: void
允许ram_payer作为付款账户为代币symbol创建一个余额为零的帐户 owner。

可以在issue61、issue62信息。
https://github.com/EOSIO/eosio.contracts/issues/61https://github.com/EOSIO/eosio.contracts/issues/62
(六)close
Type: void此操作与open相反,它关闭代币symbol的帐户owner 。

五、创建、发行和转移代币
(一)获取合约
1、转到contract目录
cd CONTRACTS_DIR
2、拉取合约源码
git clone https://github.com/EOSIO/eosio.contracts --branch master --single-branch
cd eosio.contracts/contracts/eosio.token
(二)为合约创建账户
您可能需要先解锁钱包
cleos create account eosio eosio.token PUBLIC_KEY
(三)编译合约
eosio-cpp -I include -o eosio.token.wasm src/eosio.token.cpp --abigen
(四)部署代币合约
cleos set contract eosio.token CONTRACTS_DIR/eosio.contracts/contracts/eosio.token --abi eosio.token.abi -p eosio.token@active
结果应类似于以下内容:
Reading WASM from ...Publishing contract...executed transaction:69c68b1bd5d61a0cc146b11e89e11f02527f24e4b240731c4003ad1dc0c87c2c 9696 bytes 6290 us# eosio <= eosio::setcode {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d0100000001aa011c60037f7e7f0060047f...# eosio <= eosio::setabi {"account":"eosio.token","abi":"0e656f73696f3a3a6162692f312e30000605636c6f73650002056f776e6572046e61...warning: transaction executed locally, but may not be confirmed by the network yet ]
(五)创建代币
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合约的授权。出于此原因,-p eosio.token@active 用来授权。
(六)发行代币
在我们的例子中,发行人可以向发行人账户发行代币。
cleos push action eosio.token issue '[ "eosio", "100.0000 SYS", "memo" ]' -p eosio@active
结果应类似于以下内容:
executed transaction:
a26b29d66044ad95edf0fc04bad3073e99718bc26d27f3c006589adedb717936 128 bytes 337 us# eosio.token <= eosio.token::issue {"to":"eosio","quantity":"100.0000 SYS","memo":"memo"}warning: transaction executed locally, but may not be confirmed by the network yet ]
(七)转移代币
现在帐户eosio已发行代币,将其中一些代币转移到帐户bob 。
cleos push action eosio.token transfer '[ "eosio", "bob", "25.0000 SYS", "m" ]' -p eosio@active
您需要先创建bob账户
结果应类似于以下内容:
executed transaction:
60d334850151cb95c35fe31ce2e8b536b51441c5fd4c3f2fea98edcc6d69f39d 128 bytes 497 us# eosio.token <=
eosio.token::transfer
{"from":"eosio","to":"bob","quantity":"25.0000 SYS","memo":"m"}# eosio <=
eosio.token::transfer
{"from":"eosio","to":"bob","quantity":"25.0000 SYS","memo":"m"}# bob <=
eosio.token::transfer
{"from":"eosio","to":"bob","quantity":"25.0000 SYS","memo":"m"}warning: transaction executed locally, but may not be confirmed by the network yet ]
现在使用cleos get currency balance检查“bob”是否获得了代币
cleos get currency balance eosio.token bob SYS
结果:
25.00 SYS
检查eosio的余额,注意代币已从帐户中扣除:
75.00 SYS
相关文章:
eosio.token 智能合约介绍
一、目的 eosio.token系统合约定义了允许用户为基于EOSIO的区块链创建、发行和管理代币的结构和操作,它演示了一种实现允许创建和管理代币的智能合约的方法。本文详细介绍了eosio.token系统合约并在本地测试链上实际发行了代币进行演示,适用于EOS智能合…...
3D 转换
1,3D的特点: 近小远大 物体后面遮挡不可见 2,3D移动 translate3d 3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向 transform:translateX(100px):仅仅是在x轴上移动…...
AI智能语音机器人安装方法
销售型的企业,基本靠电话营销拓客来实现效益的最大化。因为电销人员离职率高,且需求量大,需要接连不断的招人来实现业绩目标,电话机器人,贴牌招商,复制多个账户 这些都意味的企业的投入成本越来越大,博主从事多年AI技术…...
Python 潮流周刊#38:Django + Next.js 构建全栈项目
△△请给“Python猫”加星标 ,以免错过文章推送 你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。本周刊开源,欢迎投稿[1]。另有电报频道[2]作为副刊,补充发布更加丰富的资讯,…...
Jenkins升级后,构建任务配置界面重复错位
最近我把公司的Jenkins服务升级到了最新版本,升级完成后,点了一下构建任务,发现能够构建成功,就以为顺利完成升级了,下班走了,结果第二天,进入构建任务配置界面发现,界面一团乱麻&am…...
Python基础学习 -07 运算符
Python 运算符 运算符用于对变量和值执行操作。 Python 在以下组中划分运算符: 算术运算符赋值运算符比较运算符逻辑运算符身份运算符成员运算符位运算符 Python 算术运算符 算术运算符与数值一起使用来执行常见的数学运算: 运算符名称实例加x y-…...
Nim游戏
文章目录 题目描述输入格式输出格式 结论程序代码 题目描述 给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。 问…...
Pytorch: torch.linspace等间隔数值函数
torch.linspace 是 PyTorch 提供的一个用于生成等间隔数值的函数。具体而言,torch.linspace 会在指定的区间内生成指定数量的等间隔数值。 torch.linspace(start, end, steps100, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)参数说明&#x…...
【C++】案例:数列求和 与 条件筛选
1.数列求和 题目: 设计一个程序,要求对数列2471116……n的前n项求和, 例如输入3,输出13; 输入6,输出62。 答案: #include <iostream>int main() {int n;std::cout << "请输入一个正…...
问题:下列哪些属于历史文化资源的特征( ). #学习方法#学习方法
问题:下列哪些属于历史文化资源的特征( ). A、稀缺性 B、脆弱性 C、可再生性 D、多样性 参考答案如图所示...
大数据 - Spark系列《四》- Spark分布式运行原理
Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 目录 🍠…...
Java使用规范
1.关键字 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中的所有字母都是小写 2.保留字 java保留字:现有Java版本尚未使用,但以后的版本可能会作为关键字使用。命名标识符时要避免使用这些…...
Debian 11 安装并开启SSH服务实现允许root用户使用SecureCRT远程登录
Debian11系统默认没有安装SSH服务,如需要开启远程登录则需要安装相应的服务。 确保你已经登录到Debian系统,并具有root用户或sudo特权。 打开终端,并使用以下命令安装OpenSSH服务器软件包: sudo apt update sudo apt install ope…...
Linux下对线程的理解(上)
1、线程的概念 要理解线程首先要理解页表和进程地址空间,我是这样子理解的,1、进程地址空间是进程访问资源的窗口。2、页表是规定进程地址空间中哪些属于进程。3、合理的使用进程地址空间页表可以对资源进行划分。而如何理解进程呢?进程是接受…...
【蓝桥杯】环形链表的约瑟夫问题
目录 题目描述: 输入描述: 输出描述: 示例1 解法一(C): 解法二(Cpp): 正文开始: 题目描述: 据说著名犹太历史学家 Josephus 有过以下故事&a…...
深度学习本科课程 实验1 Pytorch基本操作
一、Pytorch基本操作考察 1.1 任务内容 使用 𝐓𝐞𝐧𝐬𝐨𝐫 初始化一个 𝟏𝟑 的矩阵 𝑴 和一个 𝟐𝟏 的矩阵 𝑵,对两矩阵…...
大数据分析|设计大数据分析的三个阶段
文献来源:Saggi M K, Jain S. A survey towards an integration of big data analytics to big insights for value-creation[J]. Information Processing & Management, 2018, 54(5): 758-790. 下载链接:链接:https://pan.baidu.com/s/1…...
华为机考入门python3--(7)牛客7-取近似值
分类:数字 知识点: str转float float(str) 向上取整 math.ceil(float_num) 向下取整 math.floor(float_num) 题目来自【牛客】 import math def round_to_int(float_num): # 如果小数点后的数值大于等于0.5,则向上取整…...
C# Avalonia 11.0.6 绘图
在 Avalonia 11.0.6 中,Render 方法是被标记为 sealed 的,意味着不能直接在子类中重写这个方法。这样的设计可能是为了确保一致性和避免误用。 如果你需要在 Avalonia 中进行自定义的绘图操作,可以使用 DrawingContext,但是需要通…...
使用java -jar命令运行jar包提示“错误:找不到或无法加载主类“的问题分析
用maven把普通java项目打包成可运行的jar后,打开cmd用java -jar运行此jar包时报错: 用idea运行该项目则没有问题 。 其实原因很简单,我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我…...
BiliTools:3个步骤将B站视频变成你的个人知识库
BiliTools:3个步骤将B站视频变成你的个人知识库 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 你是否曾…...
OpenCV需要的Numpy知识
图像 NumPy 数组彩色图:(高度, 宽度, 3)灰度图:(高度, 宽度)像素值:0~255,类型 uint8下面所有内容,都围绕这句话。1. 创建数组1.1 np.array () —— 把列表变成数组import numpy as np a np.array([1, 2, 3]) b …...
数字记忆争夺战:WechatDecrypt本地解密技术实现与场景化应用指南
数字记忆争夺战:WechatDecrypt本地解密技术实现与场景化应用指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 问题溯源:当数字记忆遭遇加密牢笼 从一则数据丢失案例说起 张先…...
为什么在银河麒麟上配置telnet?安全风险与替代方案探讨
银河麒麟系统中Telnet协议的深度安全剖析与现代替代方案 在国产操作系统银河麒麟上配置传统网络服务时,技术决策者常面临一个经典困境:是沿用熟悉的Telnet协议快速解决问题,还是投入资源迁移到更安全的现代方案?这个问题看似简单&…...
Aimmy:重新定义游戏公平性,AI技术为视障玩家打造的智能瞄准革命
Aimmy:重新定义游戏公平性,AI技术为视障玩家打造的智能瞄准革命 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/gh_mirrors/ai…...
Leather Dress Collection 网络协议分析与API接口设计规范
Leather Dress Collection 网络协议分析与API接口设计规范 最近在内部项目里,我们接入了好几个类似Leather Dress Collection这样的AI模型服务。一开始大家调用得挺开心,但用着用着问题就来了:有的服务突然响应变慢,有的接口偶尔…...
告别手动输入:用快马ai自动化mathtype公式生成,效率提升300%
作为一名经常需要写技术文档的开发者,数学公式的输入一直是个头疼的问题。传统的方式要么是手动在Mathtype里点选符号,要么得记住各种LaTeX语法,效率实在太低。最近尝试用InsCode(快马)平台开发了一个自动化工具,终于解决了这个痛…...
SEO_中小企业必备的快速见效SEO优化解决办法
SEO: 中小企业必备的快速见效SEO优化解决办法 在当前竞争激烈的市场环境中,中小企业如何迅速提升在搜索引擎上的曝光率,成为每个企业家关注的焦点。搜索引擎优化(SEO)不仅能帮助企业吸引更多潜在客户,还能显著提高网站…...
MAI-UI-8B应用场景解析:如何用AI自动分析软件界面与操作流程
MAI-UI-8B应用场景解析:如何用AI自动分析软件界面与操作流程 1. 理解MAI-UI-8B的核心能力 MAI-UI-8B是一款专为图形用户界面(GUI)分析而设计的AI模型。它能够像人类一样"看"懂软件界面,理解各种UI元素的功能,并预测用户可能的操作…...
解锁AMD Ryzen处理器潜能:SMU Debug Tool全场景应用指南
解锁AMD Ryzen处理器潜能:SMU Debug Tool全场景应用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…...
