Sui区块链上的代币标准:Coin标准全面解析

·

在Sui区块链生态中,Coin标准是创建和管理同质化代币(Fungible Tokens)的核心技术规范。该标准确保了不同钱包、交易所和智能合约能够以统一方式处理所有基于Sui发行的代币,包括原生SUI代币和自定义代币。

什么是Coin标准?

Coin标准是Sui智能合约中用于创建代币的技术规范。通过标准化代币创建过程,任何在Sui上发行的代币都能与原生SUI代币一样被各种平台无缝管理,无需额外的处理逻辑。

虽然所有基于Coin标准的代币都遵循相同的基础规范,但它们可以具备特殊功能。例如,开发者可以创建受监管的代币,允许创建者将特定地址加入拒绝列表,从而限制这些地址使用该代币作为交易输入。

同质化代币的实现

在Sui区块链中,Coin类型代表开放循环同质化代币(与封闭循环的Token类型相对)。代币通过类型参数T进行区分,并与元数据(如名称、符号、小数精度等)关联。sui::coin模块提供了一套接口,将Coin视为可互换资产——就像传统法币一样,同一类型的任何代币单位都是完全等价的。

提示:在Sui文档中,使用Coin标准创建的同质化代币称为"coins",而使用封闭循环代币标准创建的则称为"tokens"。实践中这两个术语经常互换使用。

国库能力(TreasuryCap)机制

当使用coin::create_currency函数创建代币时,智能合约的发布者会收到一个TreasuryCap对象。这个对象是增发新代币或销毁现有代币的必要条件,只有能够访问此对象的地址才能维护该代币在Sui网络上的供应量。

TreasuryCap对象是可转让的,这意味着您可以将代币的管理权转移给第三方。但一旦转移,您将失去自己增发和销毁代币的能力。

受监管代币的特殊功能

Coin标准支持创建受监管的代币。通过使用coin::create_regulated_currency_v2函数(该函数本身基于coin::create_currency),创建者不仅能获得常规代币功能,还会收到一个DenyCap能力。这个能力允许持有者维护一个禁止使用该代币的地址列表。

拒绝列表对象

被禁止使用特定受监管代币的地址列表存储在系统创建的DenyList共享对象中。拥有DenyCap权限的用户可以使用coin::deny_list_v2_addcoin::deny_list_v2_remove函数来添加或移除地址。

全局暂停开关

受监管代币对象包含一个allow_global_pause布尔字段。当设置为true时,该代币类型的DenyCapV2对象持有者可以使用coin::deny_list_v2_enable_global_pause函数无限期暂停代币活动。

一旦发起暂停,网络立即禁止该代币类型作为任何交易的输入。在下一个周期(约24小时)开始时,网络还会禁止所有地址接收该代币类型。

当代币类型的DenyCapV2持有者使用coin::deny_list_v2_disable_global_pause解除暂停后,代币立即恢复作为交易输入的功能。但地址要等到下一个周期才能开始接收该代币。

注意:全局暂停功能不影响代币的拒绝列表。暂停解除后,拒绝列表中的地址仍然无法与该代币交互。

代币元数据管理

每个创建的代币都包含描述其特性的元数据。通常,智能合约在创建时使用transfer::public_freeze_object函数冻结此对象,因为代币元数据几乎不应更改。受监管代币会自动冻结其创建的元数据。

常规Coin标准代币包含一个CoinMetadata对象。受监管代币基于相同的创建流程,因此除了接收相同的元数据对象外,还会获得一个包含拒绝列表信息的RegulatedCoinMetadata对象。

CoinMetadata字段说明

RegulatedCoinMetadata字段说明

代币的增发与销毁

coin模块提供了在Sui网络上创建和销毁代币的逻辑(只要您拥有相关的TreasuryCap)。这些函数对所有代币都是相同的,每个都需要TreasuryCap作为输入。

增发代币

使用coin::mint函数创建新代币。该函数需要TreasuryCap、要创建的代币值和交易上下文作为参数,并返回一个Coin对象。函数会自动更新TreasuryCap中的总供应量。

在显示时,代币值会尊重元数据中的decimals值。例如,如果您为具有decimal值为6的代币提供1000000作为代币值,则代币的值将显示为1.000000

销毁代币

使用coin::burn函数销毁现有代币。该函数只需要TreasuryCap和要销毁的代币对象作为输入,返回供应量减少的数量(代币的价值)。该函数不允许销毁超过供应量的代币。

👉 深入了解代币管理高级技巧

地址拒绝列表管理

拒绝列表仅适用于受监管代币。如前所述,当创建受监管代币时,您会收到一个DenyCapV2,授权持有者从系统创建的DenyList对象中添加和移除地址。

任何在您代币列表中的地址在添加后立即无法使用该代币作为交易输入。在地址加入拒绝列表后的周期开始时,这些地址额外不能接收该代币类型。换句话说,被添加到代币类型拒绝列表的地址立即无法发送该代币。在下一个周期开始时,该地址仍然无法发送代币,并且也不能接收代币。从那时起,该地址无法与代币交互,直到被DenyCapV2持有者明确从拒绝列表中移除。

添加地址到拒绝列表

使用coin::deny_list_v2_add函数将提供的地址添加到您代币的拒绝列表中。使用此函数时,您需要提供DenyList对象(0x403)、在代币创建时收到的DenyCap、要添加到列表中的地址以及交易上下文。使用此函数后,您提供的地址将在下一个周期无法使用您的代币。

从拒绝列表中移除地址

使用coin::deny_list_v2_remove函数从您代币的拒绝列表中移除地址。如果您尝试移除不在列表中的地址,将会收到ENotFrozen错误并且函数会中止。调用此函数后,您提供的地址将在下一个周期能够使用您的代币。

全局暂停与恢复受监管代币活动

全局暂停代币活动仅适用于受监管代币类型。

暂停代币活动

要暂停网络上具有allow_global_pause字段设置为true的受监管代币类型的活动,请使用coin::deny_list_v2_enable_global_pause。您必须提供代币类型的DenyCapV2对象来启动暂停。交易活动立即暂停,并且在调用暂停后的周期内,任何地址都无法接收该代币。

恢复代币活动

要重新启动已暂停的受监管代币的网络活动,请使用coin::deny_list_v2_disable_global_pause函数。与暂停一样,您必须提供代币类型的DenyCapV2对象。交易活动立即恢复,地址在解除暂停后的周期可以开始接收代币。

代币数据查询

您可以使用以下函数从代币中检索数据。

元数据查询

使用以下函数获取代币元数据对象上相应字段的值:

供应量查询

使用coin::supply函数获取给定代币的当前供应量。

如果CoinMetadata对象在创建时未被冻结,您可以使用以下函数更新其值:update_nameupdate_symbolupdate_descriptionupdate_icon_url

注意:RegulatedCoinMetadata在创建时被冻结,因此没有更新其数据的函数。

常见问题

Coin标准与封闭循环代币标准有何区别?

Coin标准用于创建开放循环同质化代币,可以在整个Sui生态系统中自由流通和交易。而封闭循环代币标准创建的代币通常有特定的使用场景和流通限制,更适合企业内部或特定应用内的价值交换。

如何选择创建常规代币还是受监管代币?

如果您需要完全去中心化、无许可的代币,应选择常规代币。如果您需要保留某些控制权,如阻止特定地址使用代币或在必要时暂停全部交易活动,那么受监管代币更适合您的需求。

代币元数据可以后期修改吗?

常规代币的元数据如果在创建时未被冻结,可以通过特定函数进行修改。但受监管代币的元数据在创建时自动冻结,无法更改。建议在创建代币前仔细确认所有元数据信息。

全局暂停功能会影响已有的代币持有者吗?

全局暂停会立即阻止所有使用该代币作为交易输入的行为,但不会影响已有的代币持有。持有者仍然拥有其代币所有权,只是无法在暂停期间进行转账或交易操作。

如何确保代币管理的安全性?

建议将TreasuryCapDenyCapV2等关键能力对象存储在安全的钱包中,并严格控制访问权限。对于重要的管理操作,最好使用多签钱包或硬件钱包来增加安全性。

通过深入了解Sui的Coin标准,开发者可以创建功能丰富、安全可靠的代币产品,为去中心化应用和金融服务提供强大的基础架构支持。