#token #factory #chains #owner #address #admin #cosmwasm

cw-tokenfactory-issuer

一个CosmWasm合约,在支持的链上发行新的Token Factory代币

4个稳定版本

2.4.2 2024年7月22日
2.4.0 2024年7月21日
2.3.0 2023年10月18日

#12 in #chains

Download history 3/week @ 2024-06-11 275/week @ 2024-07-16 131/week @ 2024-07-23 8/week @ 2024-07-30

414 每月下载量
4crates (3 直接)中使用

Apache-2.0

110KB
2K SLoC

cw-tokenfactory-issuer

osmosis-labs/cw-tokenfactory-issuer 分支。

此仓库包含一组合约,当与Osmosis、Juno和许多其他链中的x/tokenfactory模块结合使用时,将启用具有许多功能的中心发行的稳定币。

  • 创建新的Token Factory代币或使用现有的代币
  • 授予和撤销代币铸造和销毁的许可
  • 更新代币元数据
  • 更新合约所有者或Token Factory管理员
  • 还有更多!(见高级功能

它旨在在支持Token Factory的多个链上工作,并在Juno网络和Osmosis上进行了测试。

合约有一个所有者(可以通过ExecuteMsg::UpdateOwnership {}进行移除或更新),但它可以将功能委托给其他账户。例如,合约所有者可以将1000个代币的铸造许可委托给新的地址。

此合约的拥有权功能使用cw-ownable库实现。

cw_tokenfactory_issuer合约也是新创建的Token Factory denom的管理员。对于铸造和销毁,用户然后通过合约的ExecuteMsg与其交互,这会触发合约的访问控制逻辑,然后合约从其自己的合约账户发送tokenfactory sdk.Msgs。

实例化

在实例化cw-tokenfactory-issuer时,您可以创建一个new或一个existing

创建新的Token Factory代币

要创建一个新的Token Factory代币,只需使用subdenom实例化合约,这将创建一个新的合约以及一个格式为factory/{contract_address}/{subdenom}的代币。

示例实例化消息

{
  "new_token": {
    "subdenom": "test"
  }
}

之后的所有更新都可以通过此合约的ExecuteMsg枚举进行。有关可用方法,请参阅src/msg.rs

使用现有代币

您还可以使用现有代币实例化此合约,但大多数功能将在之前的Token Factory管理员将管理权限转让给实例化合约并可选地调用ExecuteMsg::SetBeforeSendHook {}以启用依赖功能之前不可用。

示例实例化消息

{
  "existing_token": {
    "denom": "factory/{contract_address}/{subdenom}"
  }
}

放弃Token Factory管理员

一些DAO或协议在初始设置阶段之后可能希望使其代币不可变,永久禁用此合约的功能。

为此,他们必须执行ExcuteMessage::UpdateTokenFactoryAdmin {}方法,将管理员设置为空地址或您各自链的银行模块。

例如,在Juno上这可以是

{
  "update_token_factory_admin": {
    "new_admin": "juno1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
  }
}

Token Factory标准要求每个代币都有一个Token Factory管理员,将地址设置为空将使代币不可变,并且cw-tokenfactory-issuer将无法进行未来的更新。这是安全的,因为支撑链的密码学强制执行,即使是世界上最大的超级计算机,也需要花费极其巨大的时间来计算此地址的私钥。

高级功能

此合约支持许多高级功能,DAO或代币发行者可能希望利用这些功能

  • 冻结和解冻转账,并使用白名单允许指定地址进行转账
  • 黑名单以阻止某些地址进行转账
  • 通过合约所有者强制转账代币

默认情况下,这些功能是禁用的,必须由合约所有者明确启用(例如通过DAO治理提案)。

此外,为了使这些功能正常工作,您的链必须支持MsgBeforeSendHook银行模块钩子。这还不是所有使用Token Factory的链都支持的,因此如果MsgBeforeSendHook不受支持,则黑名单和冻结功能不可用。

在支持MsgBeforeSendHook的链上,希望利用这些功能的DAO或发行者必须使用ExecuteMsg::SetBeforeSendHook {}设置发送前钩子。

此方法接受一个cosmwasm_address,这是实现SudoMsg::BlockBeforeSend入口点的合约地址。通常这将是cw_tokenfactory_issuer合约的地址,但可以指定一个自定义合约。此合约包含一个SudoMsg::BlockBeforeSend钩子,允许拒绝特定账户以及必要时冻结所有转账。

设置发送前钩子的示例消息

{
  "set_before_send_hook": {
    "cosmwasm_address": "<address of your cw_tokenfactory_issuer contract>"
  }
}

DAO或发行方希望在不受支持的链上利用这些功能时,可以在支持添加后调用ExecuteMsg::SetBeforeSendHook {}

如果DAO或发行方希望禁用并移除发送前钩子相关的功能,他们只需调用ExecuteMsg::SetBeforeSendHook {},并将cosmwasm_address设置为空字符串,如下所示

{
  "set_before_send_hook": {
    "cosmwasm_address": ""
  }
}

依赖项

~10MB
~206K SLoC