受监管的 Coin 和拒绝名单
Bfc Coin标准提供了 create_regulated_currency 函数来创建硬币。此函数与 create_currency 不同,它会生成一种代币,您可以阻止某些地址在交易中使用这些代币。这种能力是稳定币等资产的要求。
在幕后, create_regulated_currency 使用 create_currency 函数创建代币,同时还生成一个 DenyCap 对象,允许其持有者控制对代币拒绝列表的访问在 DenyList 对象中。因此,使用 create_regulated_currency 创建硬币的方式与前面的示例类似,只是将 DenyCap 对象传输到模块发布者。
// examples/move/coin/sources/regcoin.move
module examples::regcoin {
use sui::coin::{Self, DenyCap};
use sui::deny_list::{DenyList};
public struct REGCOIN has drop {}
fun init(witness: REGCOIN, ctx: &mut TxContext) {
let (treasury, deny_cap, metadata) = coin::create_regulated_currency(witness, 6, b"REGCOIN", b"", b"", option::none(), ctx);
transfer::public_freeze_object(metadata);
transfer::public_transfer(treasury, ctx.sender());
transfer::public_transfer(deny_cap, ctx.sender())
}
}
当您使用 bfc client publish 部署上一个模块时,控制台会响应事务效果,包括创建以下对象:
...
Object Changes
Created Objects:
ObjectID: <OBJECT-ID>
Sender: <SENDER-ADDR>
Owner: Immutable
ObjectType: 0x2::coin::CoinMetadata<<PACKAGE-ID>::regcoin::REGCOIN>
Version: <VERSION-NUMBER>
Digest: <DIGEST-HASH>
ObjectID: <OBJECT-ID>
Sender: <SENDER-ADDR>
Owner: Account Address ( <PUBLISHER-ADDRESS )
ObjectType: 0x2::package::UpgradeCap
Version: <VERSION-NUMBER>
Digest: <DIGEST-HASH>
ObjectID: <OBJECT-ID>
Sender: <SENDER-ADDR>
Owner: Immutable
ObjectType: 0x2::coin::RegulatedCoinMetadata<<PACKAGE-ID>::regcoin::REGCOIN>
Version: <VERSION-NUMBER>
Digest: <DIGEST-HASH>
ObjectID: <OBJECT-ID>
Sender: <SENDER-ADDR>
Owner: Account Address ( <PUBLISHER-ADDRESS )
ObjectType: 0x2::coin::DenyCap<<PACKAGE-ID>::regcoin::REGCOIN>
Version: <VERSION-NUMBER>
Digest: <DIGEST-HASH>
ObjectID: <OBJECT-ID>
Sender: <SENDER-ADDR>
Owner: Account Address ( <PUBLISHER-ADDRESS )
ObjectType: 0x2::coin::TreasuryCap<PACKAGE-ID>::regcoin::REGCOIN>
Version: <VERSION-NUMBER>
Digest: <DIGEST-HASH>
...
您可能已经注意到,发布操作会创建一个 RegulatedCoinMetadata 对象以及标准 CoinMetadata 对象。但是,您不需要在 RegulatedCoinMetadata 对象上显式调用 freeze_object ,因为 create_regulated_currency 会自动执行此操作。
输出还显示了发布者现在拥有的三个对象:用于包升级的 UpgradeCap 、用于铸造或销毁硬币的 TreasuryCap 以及用于添加或删除的 DenyCap 该硬币的拒绝名单的地址或来自该名单的地址。
拒绝名单
Bfc 框架提供了一个 DenyList 单例共享对象, DenyCap 的持有者可以访问该对象来指定无法使用 Bfc 核心类型的地址列表。然而, DenyList 的初始用例侧重于限制对指定类型硬币的访问。例如,当在 Bfc 上创建受监管的代币时,需要能够阻止某些地址将其用作交易的输入,这非常有用。 Bfc 上受监管的代币满足任何要求能够防止已知不良行为者获取这些代币的法规。