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

2024-06-08 20:36

本文主要是介绍如何使用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|英文电报群|中文电报群

这篇关于如何使用ERC-20与Sui Coin标准创建Token的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043243

相关文章

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen