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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/369753.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OJ刷题:《剑指offer》之单身狗1、2 !(巧用位操作符,超详细讲解!)

目录 1.单身狗1 1.1 题目描述 1.2排序寻找 1.3巧用位操作符 2.单身狗2 1.1 题目描述 1.2排序寻找 1.3巧用位操作符 不是每个人都能做自己想做的事&#xff0c;成为自己想成为的人。 克心守己&#xff0c;律己则安&#xff01; 创作不易&#xff0c;宝子们&#xff01;如…

homework day3

第三章 类与构造函数 一&#xff0e;选择题 1、下列不能作为类的成员的是&#xff08;B&#xff09; A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象 2、假定AA为一个类&#xff0c;a()为该类公有的函数成员&#xff0c;x为该类的一个对象&am…

如何在一台MacBook上构建大模型知识库?

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《构建大模型知识库案例实战》 —1— 如何在一台 MacBook 上构建企业知识库&#xff1f; 最核心最重要的是我们手上的文档资料出于安全要求&#xff0c;不能随便上传到云服务&#xff0c;也就无法实际验证知识…

单链表的经典题目练习

哈喽&#xff0c;小伙伴们&#xff0c;上一次我们学习了单链表的知识&#xff0c;这次我们就要运用学到的知识来做一些相关的题目。我们都知道&#xff0c;要学好数据结构与算法&#xff0c;一定要多刷相关的题目才能有所提高。所以我们一起来学习一些单链表的经典题目算法题。…

操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构

目录 操作系统 windows macos Linux 服务器搭建网站 关于解释器的流程 curl -I命令 名词解释 dos bash/terminal&#xff0c;(终端) nginx/apache&#xff08;Linux平台下的&#xff09; iis&#xff08;Windows平台下的&#xff09; GUI(图形化管理接口&#xff…

Multisim14.0仿真(四十九)共阴极/阳极7段数码管驱动设计

一、74LS47/48简介: 74LS47/48芯片是一种常用的七段数码管译码器驱动器,常用在各种数字电路和单片机系统的显示系统中. 二、74LS47/48引脚说明及定义: 7段显示译码器74LS47/48是输出低/高电平有效的译码器,74LS47/48除了有实现7段显示译码器基本功能的输入(DCBA)和输出(Ya…

小程序<swiper/>组件详解及使用指南

目录 引言微信小程序的重要性Swiper组件的角色与功能简介Swiper组件基础Swiper组件的定义与使用场景如何在微信小程序中引入Swiper组件Swiper组件的基本结构与属性Swiper组件的高级应用自定义Swiper指示点样式实现Swiper的动态效果(如自动播放、循环播放)说明引言 微信小程序…

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现…

【C++】类和对象之运算符重载(三)

前言&#xff1a;在前面我们知道在类和对象中有六个默认成员函数&#xff0c;并学习了其中三个构造函数、析构函数、拷贝构造函数&#xff0c;今天我们将进一步的学习.赋值运算符重载。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质…

[SWPUCTF 2021 新生赛]ez_unserialize

根据下面的user_agent和Disallow可以判断这个是在robots.txt 我们看的出来这是一个反序列化需要我们adminadmin passwdctf construct 构造方法&#xff0c;当一个对象被创建时调用此方法&#xff0c;不过unserialize()时却不会被调用 destruct 析构方法&#xff0c;PHP将在对象…

【学网攻】 第(20)节 -- 网络端口地址转换NAPT配置

系列文章目录 目录 系列文章目录 文章目录 前言 一、NAPT是什么&#xff1f; 二、实验 1.引入 实验目的 技术原理 实验步骤 实验设备 实验拓扑图 实验配置 实验验证 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第…

JavaGUI之SWT框架【阶段练习】

文章目录 效果展示选项卡界面创建划分右侧区域填充右侧上方Composite填充右侧下方Composite填充左侧Composite完整代码 SWT基础部分的内容以全部写完&#xff0c;现在让我们将以前学到的知识综合到一起&#xff0c;写一个小demo&#xff08;无交互功能&#xff09; 效果展示 选…

『运维备忘录』之 Systemd 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

Java实现批量视频抽帧2.0

继上个版本 对其进行略微升级 &#x1f913; 上个版本仅对一个视频进行抽帧处理 此版本可对一个文件夹内的全部视频进行抽帧并对应的文件夹进行帧图片的保存 1️⃣配置pom.xml &#xff08;保持上次不变&#xff09; <dependencies><dependency><grou…

Jmeter组件执行顺序与作用域(超详细整理)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 一、Jmeter重要组件 1&#xff09;配置元件---Config Element&#xff1a; 用于初始化默认值…

缓存组件Caffeine的使用

caffeine是一个高性能的缓存组件&#xff0c;在需要缓存数据&#xff0c;但数据量不算太大&#xff0c;不想引入redis的时候&#xff0c;caffeine就是一个不错的选择。可以把caffeine理解为一个简单的redis。 1、导入依赖 <!-- https://mvnrepository.com/artifact/com.git…

Apache POI与easyExcel:Excel文件导入导出的技术深度分析

在处理Excel文件时&#xff0c;Java开发者经常会面临多种选择&#xff0c;其中Apache POI和easyExcel是两个非常受欢迎的选择。这两个库都提供了强大的Excel文件处理功能&#xff0c;但在性能、内存使用、API设计以及扩展性方面有所不同。本文将深入分析Apache POI和easyExcel在…

留学生乱用ChatGPT真的太致命!被认定学术不诚信直接被退学

01.ChatGPT留学生神器&#xff1f;作业论文全靠它&#xff1f; 近期留学圈内最火热的话题&#xff0c;肯定是关于ChatGPT。 “这个python作业我写不来&#xff0c;让ChatGPT帮我直接生成code就好了。” “论文英文的写不来&#xff0c;ChatGPT直接生成一篇essay&#xff0c;…

C语言实现跳表(附源码)

最近在刷一些链表的题目&#xff0c;在leetcode上有一道设计跳表的题目&#xff0c;也是通过查阅各种资料&#xff0c;自己实现出来&#xff0c;感觉这是种很神奇的数据结构。 一.简介 跳表与红黑树&#xff0c;AVL树等&#xff0c;都是一种有序集合&#xff0c;那既然是有序…

修复wordpress安全漏洞

1. 问题描述&#xff1a; 用wordpress建了一个网站&#xff0c;但是学校反映说存在安全漏洞&#xff0c;通过接口https://xxx.xxx.edu.cn/?rest_route/wp/v2/users/可以访问到一些内容&#xff0c;希望可以关闭这个接口。 2. 解决办法 一共两步 &#xff08;1&#xff09;在fu…