当前位置: 首页 > 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

http://www.lryc.cn/news/294003.html

相关文章:

  • 3D 转换
  • AI智能语音机器人安装方法
  • Python 潮流周刊#38:Django + Next.js 构建全栈项目
  • Jenkins升级后,构建任务配置界面重复错位
  • Python基础学习 -07 运算符
  • Nim游戏
  • Pytorch: torch.linspace等间隔数值函数
  • 【C++】案例:数列求和 与 条件筛选
  • 问题:下列哪些属于历史文化资源的特征( ). #学习方法#学习方法
  • 大数据 - Spark系列《四》- Spark分布式运行原理
  • Java使用规范
  • Debian 11 安装并开启SSH服务实现允许root用户使用SecureCRT远程登录
  • Linux下对线程的理解(上)
  • 【蓝桥杯】环形链表的约瑟夫问题
  • 深度学习本科课程 实验1 Pytorch基本操作
  • 大数据分析|设计大数据分析的三个阶段
  • 华为机考入门python3--(7)牛客7-取近似值
  • C# Avalonia 11.0.6 绘图
  • 使用java -jar命令运行jar包提示“错误:找不到或无法加载主类“的问题分析
  • Tomcat组件架构与数据流
  • AES算法:数据传输的安全保障
  • 前端小案例——动态导航栏文字(HTML + CSS, 附源码)
  • 前置机、堡垒机(跳板机)【2024-02-04】
  • 从编程中理解:大脑的短期记忆和长期记忆
  • Rust 本地文档的使用:rustup doc
  • uni-app切换页面刷新,返回上一页刷新(onShow钩子函数的使用)
  • adb 无线连接 操作Android设备
  • 春节运维不打烊:一体化运维高效保障企业IT与机房环境
  • 类银河恶魔城学习记录1-5 CollisionCheck源代码 P32
  • spring boot 使用 Kafka