发行
Bloom 让您发行一个 受权限控制的现实世界资产 作为 Rome 链上的普通 Solidity 合约,并可通过按资产划分的控制台进行管理。该资产可从 EVM 和 Solana 钱包访问,但 发行仅限 EVM ——Solana 钱包持有资产;它不会创建资产。本指南涵盖发行方控制台、创建向导、控制台登录入口,以及六个管理选项卡。
您无需向 Bloom 提交任何文件或个人数据,您的投资者也不需要。 Bloom 记录 结果 您的合规决策结果;链上会为每个地址记录一个布尔值。您的 KYC/AML 流程——您的供应商、文件和留存策略——完全保留在您自己的系统中。完整模型见 COMPLIANCE.md;本指南仅指向该文档,而不重复其内容。
您可以做什么
作为资产的管理员,以下所有操作都可在控制台中完成——而且每一项都是实际的链上交易,并在 证据 页面:
发行资产 ——向导会将其部署为三个合约(见下文)。
审核申请 ——逐一批准或拒绝(拒绝时必须附上申请人应知晓的理由),并将已批准的地址加入允许名单。
管理允许名单 ——添加一个地址,或添加 在单笔交易中批量添加地址 (
batchAddToWhitelist),或移除一个地址;代币会在每次转账时强制执行该名单。对资产设置转账门禁 ——将转账限制为允许名单中的地址(这会使供应量最终确定),或取消该限制。
管理供应量 ——读取总量,并在您持有该角色后铸造或销毁。
进行销售 ——开启销售(数量和价格)、关闭销售、召回未售库存并提取收益。
设置并分发收益 ——先设置支付货币,然后分发一笔付款;分发会按持有人逐笔交易进行,已排除的持有人会被跳过。
管理角色 ——向某个地址授予角色、撤销某个角色,或放弃您自己的角色。
下文会在对应选项卡中逐一说明,并注明链上强制执行的内容。
发行方控制台

/issuer 列出您在此链上发行的资产,并允许您启动新的资产。
连接一个 EVM 钱包。未连接的访问者或 Solana 钱包会看到连接正确类型钱包的提示,而不是空白控制台——Solana 钱包不能发行资产,而这一产品边界由链上作为第二道独立防护来强制执行。
表格按资产列出其 名称和代号、其生命周期 阶段,以及其 销售 状态(一个 开放 徽标,或 已关闭).
两列—— 持有人 和 待审核 ——会显示破折号。持有人数量需要允许名单的枚举,而审核队列是一个按资产登录的链下存储;破折号表示 未请求 其中 0 会声称应用尚未读取的事实。
按下 发行资产 以打开向导,或选择一行以打开该资产的控制台。
创建资产:向导

/create 收集四个字段,然后部署您的资产。
名称
必填。
代号
必填。
供应量
大于零的整数。
小数位数
0 到 18 之间的整数。
按下 开始。如果某个字段无效,向导会告诉您哪个字段无效以及原因,而不是让您面对一个禁用按钮。草稿有效后,系统会依次请求您的钱包为每一步签名。
为何分步部署
一个代币会通过多笔交易部署为三个合约——绝不会是一笔。 Arc 的单笔交易
createToken需要 77 个账户锁,而 Rome 将单笔交易上限设为 62 个锁。因此向导会在各自的交易中部署每个部分,然后通过ArcTokenFactoryV2.registerToken。这是一个被显式呈现的 Rome 约束,而不是可选优化——并且这些防护会精确保持 Arc 的上游安全模型(规范代理、白名单实现、调用方持有代币的管理员角色、注册仅能执行一次)。见 COMPLIANCE.md.
六张卡片
向导会显示六张卡片,它们会跟随部署进度变化。某张卡会从 等待中 变为 签名中… 变为 完成 (或 失败)随着其交易落链而变化。
1
实现
此链的共享资产实现——已解析,无需签名。(在任何步骤运行前完成。)
2
资产
部署您的资产,并一步设置其名称、代号、供应量和小数位数。
3
谁可持有
部署该资产专属的权限模块,并由您担任其管理员。
4
在转账中强制执行
将资产指向该模块,使每一笔转账都由资产本身进行检查。
5
收益规则
部署并关联决定向谁付款的模块。
6
注册
注册该资产——这会开启销售,并允许您之后升级它。
六张卡片实际上涵盖了八个底层部署步骤,因此一次 开始 会产生 八次签名。按钮下方的说明写着 “您的钱包将要求您为每一步签名。您可在任意时点停止,并从离开的地方继续——不会丢失任何内容。” 注册是最后一步,因此中途停止是安全的:资产在每个阶段都是真实部署的,最后才完成注册。
当运行完成后,向导会显示 “已发行。您的资产已上线于 …” 并附带指向该资产控制台的链接,位于 /token/[address].
initialize会授予您所有角色。 向导的驱动地址——您的 EVM 地址——会获得代币的管理员、铸造/销毁、收益管理/分发和升级者角色,以及允许名单模块的管理员角色。因此,您的密钥保管是资产合规态势的一部分:丢失的投资者钱包只能通过您的管理员操作恢复,而控制台的 权限 选项卡会显示每项权限的持有者。(UPGRADER_ROLE是 不 会自动授予工厂——如果您希望通过工厂执行升级,请显式授予它。)
按资产划分的控制台,以及登录入口

打开 /token/[address] 会 不 立即显示控制台。它显示一个 登录入口:
“登录以管理此资产。请使用您的钱包签署一条消息——没有密码。您的权限来自资产本身,并且会在每项操作中再次核验,因此一旦撤销便会立即生效。”
按下 使用您的钱包登录。具体流程如下:
系统会请求您的钱包
personal_sign对一段简短、可读的声明(标题为 “Bloom —— 证明您正在管理此资产”),其中写明其授权的唯一操作——读取该资产的申请队列——以及资产地址、链 ID 和时间戳。应用会将该已签名声明发送到
GET /api/applications.该 服务器 进行验证:它从签名中恢复您的地址,确认该声明适用于此链且仍然有效(授权窗口为两分钟,而非整个会话),读取 代币自身的允许名单模块 链上数据,并检查您的地址是否持有允许名单写入实际所需的角色——
MANAGER_ROLE——该模块上的 MANAGER_ROLE。如果您持有该角色,队列会返回并渲染控制台;如果没有,服务器会拒绝并返回
403以及原因。

由资产决定谁可以管理它——不是此应用。 该角色在允许名单 模块上进行检查,而不是在代币上;在代币上持有同名角色并 不 不会自动继承——它们是不同的权限来源。没有账户,也没有会话:后续每个请求都携带各自新的签名,这就是 “在每项操作中再次核验” 的含义。只要在链上撤销某个钱包的角色,它就会立即失去登录能力。
拒绝会显示原因 并以引号标示 ——Bloom 从不会写出钱包为何被拒绝的说明。如果您在钱包中拒绝签名,那是您的 “不”,不是资产的决定,而且不会被报告为一次拒绝。
这个入口决定这是“谁的控制台”,而不是“什么是秘密”。 供应量、销售状态、允许名单名册以及角色都是公开的链上读取,任何区块浏览器都能查询。签名所换来的是 申请队列 ——他人的声明——以及被显示控制台的权利。
控制台标题栏
登录后,标题栏会显示资产名称及其 阶段 ——其最关键的事实:
草稿
尚未链接权限模块,因此没有任何限制谁可以持有此资产。
开放
转账是开放的,供应量仍可变化。对资产设置门禁会使其供应量最终确定,而这一点无法撤销。
已设门禁
只有允许名单中的地址可以持有此资产, 且其供应量已最终确定 ——此后将无法再铸造或销毁,且为永久限制。
在选项卡上方,摘要会显示四个数字—— 持有人 · 待审核 · 已售 · 已支付收益。其中两项来自链上和存储(待审核 在您登录后; 已售 来自店面); 持有人 取决于收益预览中的持有人数量,而 已支付收益 则取决于稍后才会提供的支付历史光标。每个等待中的单元格都会显示破折号并说明其所需内容,而不是显示一个 0 会声称链上无人请求过的事实。
六个选项卡
控制台按以下顺序提供六个选项卡: 申请 · 谁可持有 · 供应量 · 销售 · 收益 · 权限。
这些选项卡上的每次写入都使用同一个共享控件来显示写入的 命名先决条件 及其 后果 在 按钮之前,并在运行时显示其阶段(“等待您的钱包…”, “正在落链…”)。不应通过回滚来让您学习本可以先检查的内容。
申请——审核队列

此选项卡列出已申请持有该资产的主体。每一行显示申请人的地址、司法辖区、持有人类型、一个 检查 列(已通过 如果您的提供方记录了结果,否则 已声明),以及一个 状态 (待审核, 已批准, 已拒绝)。展开某一行可查看其事实和两个控件: 批准——可持有 和 拒绝。拒绝需要给出理由,该理由将成为对申请人的答复。
批准是两个独立动作,而该选项卡会确保它们各自明确。 按下 批准 会记录 您在申请存储中的决定。将该地址加入资产链上允许名单是 第二次签名 ——
batchAddToWhitelist——而在其落链之前,该行会明确显示这一点。当记录的决定与链上状态不一致时,选项卡会指出差异,并提供可消除差异的写入: 准入 用于将已批准的地址加入允许名单,或(对于仍在列表中的被拒绝地址)提供移除它的控件。在允许名单写入落链之前,该地址不能持有该资产。
该选项卡上的固定说明—— 合规接口 ——说明您自己的流程接入点:
“这里不会索取或保存任何文件——检查完全由您自己负责。请在
申请界面后连接您的提供方,或导入您已经作出的决定。Bloom 记录结果,而链上只对该地址记录一个是或否。”
这是自托管发行方会替换的界面:将申请存储的实现替换为您自己的持久实现,而调用方无需更改。Bloom 不执行任何检查,也不持有任何文件。
谁可以持有——转账门禁

此选项卡报告该资产中有多少地址已加入允许名单,并允许您切换允许名单是否 被强制执行:
当转账处于 不受限制时,它会提供 将转账限制为允许名单。该写入的后果会说明:这样做会使供应量最终确定,并且对非管理员而言是单向门。
当转账处于 受限制时,它会提供 取消限制。其后果会明确说明这不是撤销操作。
在一个 未设门禁的 (草稿)资产且未链接权限模块时,该选项卡会明确说明—— “未链接权限模块,因此没有任何限制谁可以持有此资产” ——且切换控件不会显示。
代币会检查每次转账的双方。 在资产设有门禁时,任一方不在允许名单中的转账都会在链上以类型化错误回滚。对于 EVM 钱包转账、Solana 签名转账、店面销售以及初始流动性转移,都会执行同一道门禁——除非使用您自己的管理员权限,否则没有绕行路径。
供应量

此选项卡报告当前存在的总供应量,以整数单位表示。
销售——开启、关闭并提取收益

此选项卡通过店面合约运行主销售。
当没有销售开启时,它会提供开启销售:输入 待售单位数 和 单价 (以
wUSDC计),然后按下 开启销售。写入的前提条件会首先展示——代币必须已注册,店面必须持有待售库存,且店面本身必须在其所销售代币的允许名单中——因此尚不可开启的销售会准确说明其所需条件。当销售开启时,它会显示该报价还剩多少单位,并提供 关闭此销售.
召回未售单位 将未售库存从店面转回接收方(默认为您)。这不是 不 关闭——销售仍保持启用状态,写入后果会明确说明,因此召回不会被误解为撤销。
提取收益 将店面的收入发送到某个地址(默认为您)。收益的累积独立于销售状态,因此无论销售开启还是关闭都可以提取。
收益——每笔交易支付一位持有人

此选项卡向持有人分发收益支付。
一次分发是一个遍历过程,而不是一次点击。 在 Rome 上,
distributeYieldWithLimit支付 每笔交易一位持有人 (账户上限),因此一次支付是一系列窗口,每个窗口都需要各自签名。您只需输入一次金额,以支付货币的整数单位表示,并且在遍历开始后便会锁定。 第一 个窗口会从您这里拉取全部支付金额并支付给第一位持有人;之后每个窗口只会移动已在代币合约中的资金。Bloom 会在每个窗口后重新从链上读取光标——随着余额变化,持有人集合会重新排序,而发送过期索引会从零重新开始,并再次扣取您的资金。
该选项卡显示进度—— “正在支付第 N 位(共 M 位)持有人” ——并在光标回绕时结束。如果该资产未设置支付货币,选项卡会明确说明;设置支付货币是一次分发中唯一只能由您选择的字段。
受限制持有人的份额会留在合约中。 被收益黑名单模块排除的地址会被跳过,其按比例分得的份额会留在代币合约中,而不会支付出去。
过去的支付尚未显示——读取它们需要沿着分发事件回溯到资产的首个区块,这需要稍后提供历史光标。该选项卡会在自身内部说明这一点,而不是显示一个 0.
权限——角色

此选项卡列出代币声明的每个角色及其是否已持有,每项都通过一次 hasRole 对代币进行调用。一个……的角色 不 已持有的会如实显示,而不是被省略——在权限选项卡中,缺失的行和一个 “不” 是不同的事实。
在列表下方,有一个控件用于更改角色:
授予某个账户
您输入的地址
DEFAULT_ADMIN_ROLE
从某个账户撤销
您输入的地址
DEFAULT_ADMIN_ROLE
放弃您自己的
您本人(OpenZeppelin 要求确认者必须是调用者)
您
角色选项属于代币自身,因此该控件绝不会提供代币没有的角色。与每次写入一样,权限行和结果会在按钮之前渲染,因此会在您签名前先说明入口及其单向性。
绝不会触及 Bloom 或链上的内容
为明确合规内容存放的位置:
KYC/AML 文件和个人身份信息(PII)
您自己的系统,使用您自己的供应商和保留策略—— 绝不 本应用或链上
您决定允许某个地址进入
链下记录;存储由您负责
该决策在链上的效果
一个布尔值—— isWhitelisted(address) ——由 batchAddToWhitelist
规则的执行
资产合约在每次转账时
谁可以管理该资产
资产许可名单模块中持有的角色,每次请求都会检查
有关完整的合规模型,请参阅 COMPLIANCE.md;有关持有人使用的双通道(EVM 和 Solana)机制,请参阅 LANES.md.
最后更新于
这有帮助吗?