Injective | Documentation
InjectiveGithub
Injective | 中文文档
Injective | 中文文档
  • 关于 Injective
  • 快速入门
    • 钱包
      • 创建钱包
      • 账户
      • 质押
      • 治理
      • 拍卖
    • 代币标准
      • INJ 代币
      • Token Factory
      • CW20 标准
    • 交易
      • Gas 和 Fees
  • 指南
    • 创建钱包
    • 桥接
      • From Ethereum
      • Using Wormhole
      • Using IBC
      • From Solana
    • 发布代币
    • 发布市场
    • Denom 元数据
    • 获取INJ
  • 工具包
    • injectived
      • 安装 injectived
      • 使用 injectived
      • 指令
    • Injective TS SDK
    • Injective Go SDK
    • Injective Python SDK
    • Injective CW SDK
    • The Graph
  • 参考
  • 术语表
  • 开发者
    • 快速入门
      • 指南
        • 测试网提案
        • 转换地址
        • 计算
          • 最低价格刻度
          • 最低数量刻度
    • 交易所开发者
      • 构建 DEX
      • 预言机提供方
    • Cosmwasm 开发者
      • 您的首个智能合约
      • 指南
        • 本地开发
        • 主网开发
        • 给部署地址白名单
        • 创建您的 Swap 合约
        • 创建 UIs
      • CW20 适配器
      • Injective Test Tube
    • 模块
      • Injective
        • 拍卖(Auction)
          • State
          • 消息
          • EndBlock
          • 事件
          • 参数
        • 交易所(Exchange)
          • 衍生品市场概念
          • 现货市场概念
          • 二元期权市场概念
          • 其他概念
          • 状态
          • 状态转换
          • 消息
          • 提案
          • BeginBlock
          • EndBlock
          • 事件
          • 参数
          • MsgPrivilegedExecuteContract
        • 保险(Insurance)
          • 状态
          • 状态转换
          • 消息
          • EndBlock
          • 事件
          • 参数
          • 改进
        • OCR
          • 概念
          • 状态
          • 消息
          • 提案
          • BeginBlock
          • 钩子(Hooks)
          • 事件
          • 参数
        • 预言机(Oracle)
          • 状态
          • Keeper
          • 消息
          • 提案
          • 事件
          • 改进
        • Peggy
          • 定义
          • 工作流
          • 状态
          • 消息
          • 处罚
          • EndBlock
          • 事件
          • 参数
          • 中继语义
          • 改进
        • 权限(Permissions)
          • 概念
          • 状态
          • 状态转换
        • 代币工厂(TokenFactory)
          • 概念
          • 状态
          • 消息
          • 事件
          • 参数
        • WasmX
          • 概念
          • 数据
          • 提案
          • 消息
          • 参数
      • 核心
        • Auth
        • AuthZ
        • 银行(Bank)
        • 共识(Consensus)
        • 危机(Crisis)
        • 分发(Distribution)
        • 证据(Evidence)
        • 费用授权(Feegrant)
        • 治理(Gov)
        • 群组(Group)
        • 铸造(Mint)
        • NFT
        • 参数(Params)
        • 惩罚(Slashing)
        • 质押(Staking)
        • 升级(Upgrade)
        • Circuit
        • Genutils
    • dApps 开发文档
  • 节点
    • 快速入门
      • 和节点交互
      • 运行节点
        • 设置密钥环
        • 加入网络
        • Cosmovisor
        • 升级您的节点
    • 验证者
      • 主网
        • Peggo
        • 规范链升级
          • Upgrade to 10002-rc1
          • Upgrade to 10002-rc2
          • Upgrade to 10003-rc1
          • Upgrade to 10004-rc1
          • Upgrade to 10004-rc1-patch
          • Upgrade to 10005-rc1
          • Upgrade to 10006-rc1
          • Upgrade to 10007-rc1
          • Upgrade to 10008 - Camelot
          • Upgrade to 10009
          • Upgrade to v1.10
          • Upgrade to v1.11
          • Upgrade to v1.12.0 - Volan
          • Upgrade to v1.12.1
          • Upgrade to v1.13.0 - Altaris
          • Upgrade to v1.13.2
          • Upgrade to v1.13.3
          • Upgrade to v1.14.0
          • Upgrade to v1.14.1
      • 测试网
        • 测试网 Peggo
    • 公共端点
    • 高级端点
    • Injective 索引器设置
  • 交易员
    • 快速入门
    • 文档
    • API 参考
  • 常用链接
    • Injective 101
    • Injective Hub
    • Injective 浏览器
    • Chain API Reference
    • Indexer API Reference
    • 测试网水龙头
Powered by GitBook
On this page
  • 消息
  • CreateDenom
  • Mint
  • Burn
  • ChangeAdmin
  • SetDenomMetadata
  • 链上的预期:
Export as PDF
  1. 开发者
  2. 模块
  3. Injective
  4. 代币工厂(TokenFactory)

消息

在本节中,我们描述了 tokenfactory 消息的处理过程及其对应的状态更新。

消息

CreateDenom

根据代币创建者地址和 subdenom 创建一个代币名称 factory/{creator address}/{subdenom}。Subdenom 可以包含 [a-zA-Z0-9./]。

message MsgCreateDenom {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  string subdenom = 2 [ (gogoproto.moretags) = "yaml:\"subdenom\"" ];
}

状态修改:

  • 使用 denom 创建费用从创建者地址为社区池提供资金,该费用在 Params 中设置。

  • 通过 bank keeper 设置 DenomMetaData。

  • 为给定的 denom 设置 AuthorityMetadata,以存储为创建的 denom factory/{creator address}/{subdenom} 设置的管理员。管理员自动设置为消息发送者(Msg sender)。

  • 将 denom 添加到 CreatorPrefixStore,该存储中保持每个创建者创建的 denom 状态。

Mint

特定 denom 的铸造仅允许当前管理员进行。注意,当前管理员默认为 denom 的创建者。

message MsgMint {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.base.v1beta1.Coin amount = 2 [
    (gogoproto.moretags) = "yaml:\"amount\"",
    (gogoproto.nullable) = false
  ];
}

状态修改:

  • 安全检查以下内容:

    • 检查 denom 的铸造是否通过 tokenfactory 模块创建

    • 检查消息发送者是否为 denom 的管理员

    • 通过 bank 模块为 denom 铸造指定数量的代币

Burn

燃烧特定代币的操作仅允许当前管理员执行。请注意,当前管理员默认是代币创建者。

message MsgBurn {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.base.v1beta1.Coin amount = 2 [
    (gogoproto.moretags) = "yaml:\"amount\"",
    (gogoproto.nullable) = false
  ];
}

状态修改:

  1. 对以下内容进行安全检查:

    1. 检查代币铸造是否通过tokenfactory模块创建

    2. 检查消息发送者是否为该代币的管理员

  2. 通过bank模块燃烧指定数量的代币

ChangeAdmin

更改代币的管理员。请注意,只有当前代币的管理员才能调用此操作。

message MsgChangeAdmin {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  string denom = 2 [ (gogoproto.moretags) = "yaml:\"denom\"" ];
  string newAdmin = 3 [ (gogoproto.moretags) = "yaml:\"new_admin\"" ];
}

SetDenomMetadata

为特定代币设置元数据仅允许由该代币的管理员执行。此操作允许覆盖bank模块中的代币元数据。

message MsgChangeAdmin {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.bank.v1beta1.Metadata metadata = 2 [ (gogoproto.moretags) = "yaml:\"metadata\"", (gogoproto.nullable)   = false ];
}

状态修改:

  1. 检查消息发送者是否为该代币的管理员

  2. 修改AuthorityMetadata状态条目以更改代币的管理员

链上的预期:

链上地址的bech32前缀最大长度为16个字符。 这是由于代币有128字节的最大长度限制,该限制由SDK强制执行,并且我们将longest_subdenom设置为44字节。 一个token factory代币的代币名称为:factory/{creator address}/{subdenom} 拆解成子组件后,包含以下部分:

  • len(factory) = 7

  • 2 * len("/") = 2

  • len(longest_subdenom)

  • len(creator_address) = len(bech32(longest_addr_length, chain_addr_prefix))

当前最长地址长度为32字节。由于SDK的错误修正设置,这意味着len(bech32(32, chain_addr_prefix)) = len(chain_addr_prefix) + 1 + 58。将所有部分相加,总长度约束为128: 128 = 7 + 2 + len(longest_subdenom) + len(longest_chain_addr_prefix) + 1 + 58。 因此,len(longest_subdenom) + len(longest_chain_addr_prefix) = 128 - (7 + 2 + 1 + 58) = 60。

关于如何在longest_subdenom和longest_chain_addr_prefix之间分配这60字节的选择是有些任意的。考虑到以下因素:

  • subdenom应至少为32字节,以便哈希可以存储其中

  • 更长的subdenoms对于创建人类可读的代币名称非常有帮助

  • 链地址应尽量保持较小。到目前为止,Cosmos中最长的HRP为11字节(persistence)

为了明确起见,目前设置为:

  • len(longest_subdenom) = 44

  • len(longest_chain_addr_prefix) = 16

请注意,如果SDK增加代币的最大长度限制(128字节),这些限制应当随之增加。因此,不要让代码依赖于这些最大长度来进行解析。

Previous状态Next事件

Last updated 2 months ago

根据,技术上一个32字节地址(‘数据字段’)的最长HRP为31字节。(来自encode(data) = 59字节,最大长度为90字节)

BIP-0173