当前位置: 首页 > news >正文

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的区块链创建、发行和管理代币的结构和操作&#xff0c;它演示了一种实现允许创建和管理代币的智能合约的方法。本文详细介绍了eosio.token系统合约并在本地测试链上实际发行了代币进行演示&#xff0c;适用于EOS智能合…...

3D 转换

1&#xff0c;3D的特点&#xff1a; 近小远大 物体后面遮挡不可见 2&#xff0c;3D移动 translate3d 3D移动在2D移动的基础上多加了一个可以移动的方向&#xff0c;就是z轴方向 transform&#xff1a;translateX&#xff08;100px&#xff09;&#xff1a;仅仅是在x轴上移动…...

AI智能语音机器人安装方法

销售型的企业&#xff0c;基本靠电话营销拓客来实现效益的最大化。因为电销人员离职率高&#xff0c;且需求量大&#xff0c;需要接连不断的招人来实现业绩目标&#xff0c;电话机器人,贴牌招商,复制多个账户 这些都意味的企业的投入成本越来越大&#xff0c;博主从事多年AI技术…...

Python 潮流周刊#38:Django + Next.js 构建全栈项目

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。本周刊开源&#xff0c;欢迎投稿[1]。另有电报频道[2]作为副刊&#xff0c;补充发布更加丰富的资讯&#xff0c;…...

Jenkins升级后,构建任务配置界面重复错位

最近我把公司的Jenkins服务升级到了最新版本&#xff0c;升级完成后&#xff0c;点了一下构建任务&#xff0c;发现能够构建成功&#xff0c;就以为顺利完成升级了&#xff0c;下班走了&#xff0c;结果第二天&#xff0c;进入构建任务配置界面发现&#xff0c;界面一团乱麻&am…...

Python基础学习 -07 运算符

Python 运算符 运算符用于对变量和值执行操作。 Python 在以下组中划分运算符&#xff1a; 算术运算符赋值运算符比较运算符逻辑运算符身份运算符成员运算符位运算符 Python 算术运算符 算术运算符与数值一起使用来执行常见的数学运算&#xff1a; 运算符名称实例加x y-…...

Nim游戏

文章目录 题目描述输入格式输出格式 结论程序代码 题目描述 给定 n 堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问…...

Pytorch: torch.linspace等间隔数值函数

torch.linspace 是 PyTorch 提供的一个用于生成等间隔数值的函数。具体而言&#xff0c;torch.linspace 会在指定的区间内生成指定数量的等间隔数值。 torch.linspace(start, end, steps100, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)参数说明&#x…...

【C++】案例:数列求和 与 条件筛选

1.数列求和 题目&#xff1a; 设计一个程序&#xff0c;要求对数列2471116……n的前n项求和&#xff0c; 例如输入3&#xff0c;输出13; 输入6&#xff0c;输出62。 答案&#xff1a; #include <iostream>int main() {int n;std::cout << "请输入一个正…...

问题:下列哪些属于历史文化资源的特征( ). #学习方法#学习方法

问题&#xff1a;下列哪些属于历史文化资源的特征( ). A、稀缺性 B、脆弱性 C、可再生性 D、多样性 参考答案如图所示...

大数据 - Spark系列《四》- Spark分布式运行原理

Spark系列文章&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 目录 &#x1f360;…...

Java使用规范

1.关键字 定义&#xff1a;被Java语言赋予了特殊含义&#xff0c;用做专门用途的字符串(单词) 特点&#xff1a;关键字中的所有字母都是小写 2.保留字 java保留字&#xff1a;现有Java版本尚未使用&#xff0c;但以后的版本可能会作为关键字使用。命名标识符时要避免使用这些…...

Debian 11 安装并开启SSH服务实现允许root用户使用SecureCRT远程登录

Debian11系统默认没有安装SSH服务&#xff0c;如需要开启远程登录则需要安装相应的服务。 确保你已经登录到Debian系统&#xff0c;并具有root用户或sudo特权。 打开终端&#xff0c;并使用以下命令安装OpenSSH服务器软件包&#xff1a; sudo apt update sudo apt install ope…...

Linux下对线程的理解(上)

1、线程的概念 要理解线程首先要理解页表和进程地址空间&#xff0c;我是这样子理解的&#xff0c;1、进程地址空间是进程访问资源的窗口。2、页表是规定进程地址空间中哪些属于进程。3、合理的使用进程地址空间页表可以对资源进行划分。而如何理解进程呢&#xff1f;进程是接受…...

【蓝桥杯】环形链表的约瑟夫问题

目录 题目描述&#xff1a; 输入描述&#xff1a; 输出描述&#xff1a; 示例1 解法一&#xff08;C&#xff09;&#xff1a; 解法二&#xff08;Cpp&#xff09;&#xff1a; 正文开始&#xff1a; 题目描述&#xff1a; 据说著名犹太历史学家 Josephus 有过以下故事&a…...

深度学习本科课程 实验1 Pytorch基本操作

一、Pytorch基本操作考察 1.1 任务内容 使用 &#x1d413;&#x1d41e;&#x1d427;&#x1d42c;&#x1d428;&#x1d42b; 初始化一个 &#x1d7cf;&#x1d7d1; 的矩阵 &#x1d474; 和一个 &#x1d7d0;&#x1d7cf; 的矩阵 &#x1d475;&#xff0c;对两矩阵…...

大数据分析|设计大数据分析的三个阶段

文献来源&#xff1a;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. 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1…...

华为机考入门python3--(7)牛客7-取近似值

分类&#xff1a;数字 知识点&#xff1a; str转float float(str) 向上取整 math.ceil(float_num) 向下取整 math.floor(float_num) 题目来自【牛客】 import math def round_to_int(float_num): # 如果小数点后的数值大于等于0.5&#xff0c;则向上取整&#xf…...

C# Avalonia 11.0.6 绘图

在 Avalonia 11.0.6 中&#xff0c;Render 方法是被标记为 sealed 的&#xff0c;意味着不能直接在子类中重写这个方法。这样的设计可能是为了确保一致性和避免误用。 如果你需要在 Avalonia 中进行自定义的绘图操作&#xff0c;可以使用 DrawingContext&#xff0c;但是需要通…...

使用java -jar命令运行jar包提示“错误:找不到或无法加载主类“的问题分析

用maven把普通java项目打包成可运行的jar后&#xff0c;打开cmd用java -jar运行此jar包时报错&#xff1a; 用idea运行该项目则没有问题 。 其实原因很简单&#xff0c;我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...