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

news2024/11/29 4:27:56

区块链使用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.coloradmin.cn/o/1804552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VueRouter3学习笔记

文章目录 1&#xff0c;入门案例2&#xff0c;一些细节高亮效果非当前路由会被销毁 3&#xff0c;嵌套路由4&#xff0c; 传递查询参数5&#xff0c;命名路由6&#xff0c;传递路径参数7&#xff0c;路径参数转props8&#xff0c;查询参数转props9&#xff0c;replace模式10&am…

ChatGPT-4o, 腾讯元宝,通义千问对比测试中文文化

国内的大模型应用我选择了国内综合实力最强的两个&#xff0c;一个是腾讯元宝&#xff0c;一个是通义千问。其它的豆包&#xff0c;Kimi&#xff0c;文心一言等在某些领域也有强于竞品的表现。 问一个中文文化比较基础的问题,我满以为中文文化chatGPT不如国内的大模型。可事实…

【安装笔记-20240608-Linux-动态域名更新服务之YDNS】

安装笔记-系列文章目录 安装笔记-20240608-Linux-动态域名更新服务之YDNS 文章目录 安装笔记-系列文章目录安装笔记-20240608-Linux-动态域名更新服务之YDNS 前言一、软件介绍名称&#xff1a;YDNS主页官方介绍 二、安装步骤测试版本&#xff1a;openwrt-23.05.3-x86-64注册填…

基于协调过滤算法商品推荐系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;论坛管理&#xff0c;商品资讯管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#xff0c;商品资讯&#xff0c;商家&#xff0c;商品 开发系统…

PyTorch学习6:多维特征输入

文章目录 前言一、模型说明二、示例1.求解步骤2.示例代码 总结 前言 介绍了如何处理多维特征的输入问题 一、模型说明 多维问题分类模型 二、示例 1.求解步骤 1.载入数据集&#xff1a;数据集用路径D:\anaconda\Lib\site-packages\sklearn\datasets\data下的diabetes.cs…

【C++ STL】模拟实现 string

标题&#xff1a;【C :: STL】手撕 STL _string 水墨不写bug &#xff08;图片来源于网络&#xff09; C标准模板库&#xff08;STL&#xff09;中的string是一个可变长的字符序列&#xff0c;它提供了一系列操作字符串的方法和功能。 本篇文章&#xff0c;我们将模拟实现STL的…

Polar Web【中等】写shell

Polar Web【中等】写shell Contents Polar Web【中等】写shell思路&探索EXP运行&总结 思路&探索 初看题目&#xff0c;预测需要对站点写入木马&#xff0c;具体操作需要在过程中逐步实现。 打开站点(见下图)&#xff0c;出现 file_put_contents 函数&#xff0c;其…

pdf文件如何防篡改内容

PDF文件防篡改内容的方法有多种&#xff0c;以下是一些常见且有效的方法&#xff0c;它们可以帮助确保PDF文件的完整性和真实性&#xff1a; 加密PDF文档&#xff1a; 原理&#xff1a;通过设置密码来保护PDF文档&#xff0c;防止未经授权的访问和修改。注意事项&#xff1a;密…

如何对stm32查看IO功能。

有些同学对于别人的开发板的资源&#xff0c;或者IO口&#xff0c;或者串口等资源不知道怎么分配。 方法1、看硬石、野火、正点原子的开发板&#xff0c;看下他们的例子&#xff0c;那个资源用什么。自己多看几个原理图&#xff0c;多看几个视频&#xff0c;做一下笔记。以后依…

通过无障碍控制 Compose 界面滚动的实战和原理剖析

前言 针对 Compose UI 工具包&#xff0c;开发者不仅需要掌握如何使用新的 UI 组件达到 design 需求&#xff0c;更需要了解和实现与 UI 的交互逻辑。 比如 touch 事件、Accessibility 事件等等。 Compose 中对 touch 事件的处理和原理&#xff0c;笔者已经在《通过调用栈快…

Point-LIO:鲁棒高带宽激光惯性里程计

1. 动机 现有系统都是基于帧的&#xff0c;类似于VSLAM系统&#xff0c;频率固定&#xff08;例如10Hz)&#xff0c;但是实际上LiDAR是在不同时刻进行顺序采样&#xff0c;然后积累到一帧上&#xff0c;这不可避免地会引入运动畸变&#xff0c;从而影响建图和里程计精度。此外…

NASA数据集——SARAL 近实时增值业务地球物理数据记录海面高度异常

SARAL Near-Real-Time Value-added Operational Geophysical Data Record Sea Surface Height Anomaly SARAL 近实时增值业务地球物理数据记录海面高度异常 简介 2020 年 3 月 18 日至今 ALTIKA_SARAL_L2_OST_XOGDR 这些数据是近实时&#xff08;NRT&#xff09;&#xff…

【稳定检索/投稿优惠】2024年材料科学与能源工程国际会议(MSEE 2024)

2024 International Conference on Materials Science and Energy Engineering 2024年材料科学与能源工程国际会议 【会议信息】 会议简称&#xff1a;MSEE 2024大会地点&#xff1a;中国苏州会议官网&#xff1a;www.iacmsee.com会议邮箱&#xff1a;mseesub-paper.com审稿结…

WPF音乐播放器 零基础4个小时左右

前言&#xff1a;winfrom转wpf用久的熟手说得最多的是,转回去做winfrom难。。当时不明白。。做一个就知道了。 WPF音乐播放器 入口主程序 FontFamily"Microsoft YaHei" FontSize"12" FontWeight"ExtraLight" 居中显示WindowStartupLocation&quo…

【越界写null字节】ACTF2023 easy-netlink

前言 最近在矩阵杯遇到了一道 generic netlink 相关的内核题&#xff0c;然后就简单学习了一下 generic netlink 相关概念&#xff0c;然后又找了一到与 generic netlink 相关的题目。简单来说 generic netlink 相关的题目仅仅是将用户态与内核态的交互方式从传统的 ioctl 变成…

以sqlilabs靶场为例,讲解SQL注入攻击原理【42-53关】

【Less-42】 使用 or 11 -- aaa 密码&#xff0c;登陆成功。 找到注入点&#xff1a;密码输入框。 解题步骤&#xff1a; # 获取数据库名 and updatexml(1,concat(0x7e,(select database()),0x7e),1) -- aaa# 获取数据表名 and updatexml(1,concat(0x7e,(select group_conca…

CSS函数: translate、translate3d的使用

translate()和translate3d()函数可以实现元素在指定轴的平移的功能。函数使用在CSS转换属性transform的属性值。实现转换的函数类型有&#xff1a; translate()&#xff1a;2D平面实现X轴、Y轴的平移translate3d()&#xff1a;3D空间实现位置的平移translateX()&#xff1a;实…

Spring Boot整合Jasypt 库实现配置文件和数据库字段敏感数据的加解密

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

idea如何根据路径快速在项目中快速打卡该页面

在idea项目中使用快捷键shift根据路径快速找到该文件并打卡 双击shift(连续按两下shift) -粘贴文件路径-鼠标左键点击选中跳转的路径 自动进入该路径页面 例如&#xff1a;我的实例路径为src/views/user/govType.vue 输入src/views/user/govType或加vue后缀src/views/user/go…

ChatGLM2-6b的本地部署

** 大模型玩了一段时间了&#xff0c;一直没有记录&#xff0c;借假期记录下来 ** ChatGlm2介绍&#xff1a; chatglm2是清华大学发布的中英文双语对话模型&#xff0c;具备强大的问答和对话功能&#xff0c;拥有长达32K的上下文&#xff0c;可以输出比较长的文本。6b的训练参…