如何使用ERC-20与Sui Coin标准创建Token

区块链使用tokens作为传递价值的基本手段。它们可以是区块链的原生交换单位,也可以是应用中的交换单位,甚至可以在游戏世界中用作货币。tokens还支持Sui和其他区块链上的强大DeFi活动。

以太坊使用ERC-20标准来创建tokens,借用智能合约,这些tokens可以由开发者为各种目的创建。在Sui上,tokens使用Coin包。像ERC-20 tokens一样,开发者可以在Sui上构建Coins用于广泛的用途。然而,Sui与众不同的数据模型意味着每个coin都是由网络上的一个地址拥有的。

通过在以太坊上创建ERC-20 tokens和在Sui上创建Coins的过程,可以看出这两个标准之间的差异。以太坊开发者可能会对Sui的Coin包的灵活性感到惊讶。

部署ERC-20 token

在这个例子中,我们将使用Remix IDE演示使用ERC-20标准创建token所需的步骤。

1. 首先在浏览器中打开在线Remix IDE。

2. 从OpenZeppelin中选择ERC-20项目模板。

3. 在左侧窗格的文件浏览器中,选择contracts目录中的Token.sol来加载其依赖项。

4. 在默认构造函数中添加_mint函数,以指定要创建的tokens数量。以下代码示例展示了一种方法。

contract MyToken is ERC-20, ERC-20Permit {
    constructor() ERC-20("MyToken", "MTK") ERC-20Permit("MyToken") {_mint(msg.sender, 12);}
}

5. 在快速菜单中点击Compile图标。

6. 打开Deploy & Run Transactions插件,选择Remix VM (Cancun)环境,然后点击Deploy按钮。

按照上述步骤,将ERC-20依赖项复制到您的项目中。您的合约以及那些复制的依赖项编译成EVM字节码,并部署到虚拟区块链上。您的交易被挖掘,表示您ERC-20 tokens的合约现在在Remix的虚拟区块链上是可用的。

如何表示ERC-20 tokens

要找到你的tokens,进入Remix中的依赖合约(.deps文件夹),并导航到ERC-20.sol文件。该抽象合约的第一行是:

mapping(address account => uint256) private _balances;

这个映射存储了所有用户的所有余额,要获取用户的余额,可以使用用户的地址调用合约的balanceOf函数。它会查询这个映射并获取值。在显示资金时,你的MetaMask钱包会对各种合约进行多次balanceOf()调用,并显示结果。

换句话说,所有的转账、铸币、销毁以及DeFi协议的交互,最终都会更新这个映射中的值。

在Sui上部署Coin

在Sui上,部署的合约不代表新的tokens。相反,Sui框架使用Coin包来提供这一功能。尽管是一个简化的类比,你可以将单个包视为一个合约。它暴露的函数可以接受对象并返回其他对象。

按照文档中的步骤安装Sui来设置你的编码环境。或者,你也可以使用上面提到的Remix IDE,通过安装WELLDONE Code插件在Sui上编写Move代码。

以下Move代码示例导入了Coin模块,并使用其create_currency函数来初始化 coin。

use sui::coin::{Self, TreasuryCap};

public struct MY_COIN has drop {}

fun init(witness: MY_COIN, ctx: &mut TxContext) {
        let (treasury, metadata) = coin::create_currency(witness, 6, b"MY_COIN", b"", b"", option::none(), ctx);
        transfer::public_freeze_object(metadata);
        transfer::public_transfer(treasury, ctx.sender())
    }

当你调用create_currency()时,Sui会返回你货币的TreasuryCap<T>和CoinMetadata<T>对象,其中T是你的货币类型(在前面的例子中是MY_COIN)。

你的钱包地址实际上持有这些对象。它们只存在于你的钱包中,而不是像ERC-20方法那样使用映射来跟踪所有权。TreasuryCap,即“国库能力”,是铸造新coin供应所需的关键。TreasuryCap可以转移到受信任的第三方地址,或者可以被销毁。销毁TreasuryCap类似于在ERC-20合约中放弃所有权。

如何表示Coin对象

要铸造新供应量,TreasuryCap持有者需调用Coin mint函数。该函数铸造或创建一个代表铸币数量的Coin<T>对象,然后它待在你的钱包里(假设你的地址被指定为接收者)。如果TreasuryCap持有者再次调用mint() ,该过程会创建另一个Coin<T>对象,并将其转移到你的钱包。你可以为同一货币拥有多个Coin对象,你的该货币的总余额是这些coins的总和。

ERC-20与Coin的功能比较

尽管以太坊和Sui在tokens方面提供了类似的操作,如转账和支出,但每个区块链的基础结构在这些操作的工作方式上存在根本差异。

铸造和销毁

在以太坊上,授权用户可以通过调用该token合约中的mint函数来铸造新币,这会更新_balances映射并增加总供应量。任何用户都可以调用burn函数,但他们只能销毁自己的余额。

同样,在Sui上,授权用户可以调用mint函数来铸造新coins,如上所述。不同之处在于,你在Sui上的余额不是通过共享状态中的映射表示的,而是存在于你钱包中的实际对象中。从这个意义上说,ERC-20就像一张ATM卡,让你可以数字化地操作银行金库中的现金,而Sui则像一个实体钱包,你的余额与手头的现金是固有的。

Sui支持相同类型coins的分割和合并。因此,如果你有多个表示你货币的Coin对象,可以将它们合并为一个对象。你也可以将一个Coin对象分割为多个相同类型的Coin对象。

转移

在以太坊上转移tokens 时,你调用token合约的transfer函数。这个函数会验证你有足够的余额进行转移,然后扣减你的余额并增加接收地址的余额,类似于一个物理账本的操作。

在Sui上,由于你实际上拥有这些Coin对象,你只需将Coin对象发送到另一个地址。无需通知任何中心位置来确保余额更新。将拥有的对象从一个钱包发送到另一个钱包的操作不会影响区块链的其余部分。

以这种方式发送对象被称为单一所有者交易,不需要区块链的共识。因此,Sui可以并行执行单一所有者交易,并快速达成最终性。只有Sui上的共享对象才需要共识。

花费

以太坊用户熟悉批准(Approve)概念。每当你与任何DeFi协议互动时,必须首先批准该协议代表你花费你的tokens。例如,当你在Uniswap上进行交换时,已批准的路由器会调用tokens合约中的转移函数。tokens合约然后验证调用者是所有者或已批准的地址。

Sui没有这个构造过程。如果你拥有一个对象,你是唯一可以转移它的一方,没有其他实体可以从你的钱包中提取该对象。相反,Sui上的协议将Coin对象作为输入。例如,要调用去中心化交易所的交换函数,你必须将你的Coin对象传递给交换函数,将对象的所有权转移给协议。现在协议拥有这个Coin对象,它可以将其交换为你所需类型的另一Coin对象并转移到你的钱包。

了解Sui

在以太坊和其他区块链上有经验的开发者如果对在Sui上构建感兴趣,会发现许多类似的范式。例如,tokens在很多实际用途上都类似。然而,如果开发者不花时间了解上述描述的基本差异,就会遇到麻烦。

另一方面,传统面向对象编程环境有经验的开发者会在Sui中找到类似的结构。将对象视为可以存储在钱包中或通过代码操作的事物,这种直观的想法在Sui中很常见。

如果你想了解更多关于在Sui上创建tokens的信息,请查看相关文档。


关于Sui Network

Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac

官网|英文Twitter|中文Twitter|Discord|英文电报群|中文电报群

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

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

相关文章

大数据环境搭建@Hive编译

Hive3.1.3编译 1.编译原因1.1Guava依赖冲突1.2开启MetaStore后运行有StatsTask报错1.3Spark版本过低 2.环境部署2.1jdk安装2.2maven部署2.3安装图形化桌面2.4安装Git2.5安装IDEA 3.拉取Hive源码4.Hive源码编译4.1环境测试1.测试方法——编译2.问题及解决方案&#x1f4a5;问题1…

全网最强下载神器IDM之如何用IDM下载百度网盘文件不限速 如何用IDM下载百度云资源 IDM激活码免费版下载安装

百度网盘是比较早的网盘类应用&#xff0c;用户群体比较多&#xff0c;但百度网盘对于非会员用户限速比较严重。IDM是非常好用的下载工具&#xff0c;那么我们如何用IDM下载百度网盘文件不限速&#xff1f;我们可以通过多种方法使用IDM下载百度网盘文件。下面我们就来看如何用I…

RabbitMQ python第三方库pika应用入门实践

1. RabbitMQ简介 RabbitMQ是一个可靠、高效的开源消息代理服务器&#xff0c;基于AMQP协议。它具备以下特点&#xff1a; 可以支持多种消息协议&#xff0c;如AMQP、STOMP和MQTT等。提供了持久化、可靠性和灵活的路由等功能。支持消息的发布和订阅模式。具备高可用性和可扩展…

天才程序员周弈帆 | Stable Diffusion 解读(一):回顾早期工作

本文来源公众号“天才程序员周弈帆”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Stable Diffusion 解读&#xff08;一&#xff09;&#xff1a;回顾早期工作 在2022年的这波AI绘画浪潮中&#xff0c;Stable Diffusion无疑是最…

pdf怎么编辑修改内容?3个实用软件!

在当今数字化时代&#xff0c;PDF文件因其跨平台、格式固定的特性&#xff0c;成为我们日常工作和生活中不可或缺的一部分。然而&#xff0c;PDF文件的修改和编辑往往成为许多人的难题。本文将为您详细介绍如何编辑修改PDF文件的内容&#xff0c;并推荐几款实用的编辑软件&…

Java——数组排序和查找

一、排序介绍 1、排序的概念 排序是将多个数据按照指定的顺序进行排列的过程。 2、排序的种类 排序可以分为两大类&#xff1a;内部排序和外部排序。 3、内部排序和外部排序 1&#xff09;内部排序 内部排序是指数据在内存中进行排序&#xff0c;适用于数据量较小的情况…

【CS.SE】使用 docker pull confluentinc/cp-kafka 的全面指南

文章目录 1 引言2 准备工作2.1 安装 Docker2.1.1 在 Linux 上安装 Docker2.1.2 在 macOS 上安装 Docker2.1.3 在 Windows 上安装 Docker 2.2 验证 Docker 安装 3 拉取 confluentinc/cp-kafka Docker 镜像3.1 拉取镜像3.2 验证镜像 4 运行 Kafka 容器4.1 启动 ZooKeeper4.2 启动…

【启明智显彩屏应用】Model3A 7寸触摸彩屏AGV小车应用方案

一、AGV小车概述 &#xff08;一&#xff09;介绍 自动导向车(Automated Guided Vehicle&#xff0c;简称AGV)&#xff0c;也称为自动导向搬运车、自动引导搬运车。AGV广泛应用在自动化的生产当中&#xff0c;大大节约劳动力和提高生产效率。 &#xff08;二&#xff09;现状…

调试环境搭建(Redis 6.X 版本)

今儿&#xff0c;我们来搭建一个 Redis 调试环境&#xff0c;目标是&#xff1a; 启动 Redis Server &#xff0c;成功断点调试 Server 的启动过程。使用 redis-cli 启动一个 Client 连接上 Server&#xff0c;并使用 get key 指令&#xff0c;发起一次 key 的读取。 视频可见…

170.二叉树:平衡二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}* Tree…

pytorch之猫狗识别项目

1. 导入资源包 资源包&#xff1a; import torchvision&#xff1a;PyTorch 提供的视觉库&#xff0c;包含了常用的计算机视觉模型架构、数据集以及图像转换工具。 from torchvision import datasets, models&#xff1a;导入 torchvision 中的 datasets 和 models 模块&#…

【NPS】微软NPS配置802.1x,验证域账号,动态分配VLAN(有线网络续篇)

继上一篇文章中成功实施了有线802.1x验证域账号并动态分配VLAN的策略之后&#xff0c;我们迎来了一个新的目标&#xff1a;在用户验证失败时&#xff0c;自动分配一个Guest VLAN&#xff0c;以确保用户至少能够访问基本的网络服务。这一改进将显著提升网络的灵活性和用户的上网…

东航携手抖音生活服务开启机票首播,推出国内、国际超值机票次卡

在民航暑运旺季到来之际&#xff0c;越来越多的用户选择提前做好旅行规划&#xff0c;囤下高性价比的出游商品。6月6日18点&#xff0c;中国东方航空&#xff08;以下简称“东航”&#xff09;将在抖音开启首次机票直播&#xff0c;推荐多款超值机票次卡及空中Wi-Fi等特色产品&…

【Python机器学习】PCA——特征提取(1)

PCA的一个重要应用是特征提取。特征提取背后的思想是&#xff0c;可以找到一种数据表示&#xff0c;比给定的原始表示更适合于分析。特征提取很有用&#xff0c;它的一个很好的应用实例就是图像。图像由像素组成&#xff0c;通常存储于红绿蓝强度。图像中的对象通常由上千个像素…

Postman 连接数据库 利用node+xmysql

1、准备nodejs环境 如果没有安装&#xff0c;在网上找教程&#xff0c;安装好后&#xff0c;在控制台输入命令查看版本&#xff0c;如下就成功了 2、安装xmysql 在控制台输入 npm install -g xmysql 3、连接目标数据库 帮助如下&#xff1a; 示例&#xff1a; 目标数据库…

【稳定检索/投稿优惠】2024年智慧金融与财务管理国际会议(SFFM 2024)

2024 International Conference on Smart Finance and Financial Management 2024年智慧金融与财务管理国际会议 【会议信息】 会议简称&#xff1a;SFFM 2024 截稿时间&#xff1a;以官网为准 大会地点&#xff1a;中国广州 会议官网&#xff1a;www.iacsffm.com 会议邮箱&am…

Linux 35.5 + JetPack v5.1.3@FUEL编译安装

Linux 35.5 JetPack v5.1.3FUEL编译安装 1. 源由2. 编译&安装Step 1&#xff1a;依赖库安装Step 2&#xff1a;建立工程Step 3&#xff1a;编译工程Step 4&#xff1a;安装工程 3. 问题汇总3.1 fuel_planner/exploration_manager - dw3.2 fuel_planner/plan_env - OpenCV库…

Anaconda软件:安装、管理python相关包

Anaconda的作用 一个python环境中需要有一个解释器, 和一个包集合. 解释器&#xff1a; 根据python的版本大概分为2和3. python2和3之间无法互相兼容, 也就是说用python2语法写出来的脚本不一定能在python3的解释器中运行. 包集合&#xff1a;包含了自带的包和第三方包, 第三…

RPA影刀 | 变量的使用

1.什么是变量 2.变量的作用 作用1&#xff1a;方便后续流程调用 这里在后续流程“点击元素”中&#xff0c;就可以选中这个变量 作用2&#xff1a;区分相同属性的变量 如果要打开两个网页&#xff0c;总不能都叫web_page吧。 所以这里一个叫百度web_page&#xff0c;一个叫…

Docker:认识镜像仓库及其命令

文章目录 Docker Registry什么是Docker Registry 镜像仓库工作机制使用流程实际使用方法仓库的拉取机制 常用的镜像仓库---DockerHub什么是DockerHub私有仓库 镜像仓库命令docker logindocker pulldocker pushdocker searchdocker logout Docker Registry 什么是Docker Regist…