双通道
一次代币部署,两种钱包世界。两条路径都执行 相同的合约 并采用 相同的合规门控 ——它们唯一的区别在于由谁签名,以及交易如何到达链上。
EVM 路径
标准的以太坊工具链,保持不变:钱包签署一笔 EVM 交易,链的 JSON-RPC 端点接受它,代币合约执行允许名单限制。无需集成任何 Bloom 特定内容——受门控转账的实测成本约为 3.1M gas(Rome gas 以 USDC 计价;为便于对比,普通原生转账约为 1.48M gas)。
Solana 路径
Solana 钱包驱动相同的 EVM 合约 以原生方式——任何地方都不存在 EVM 密钥:
身份。 用户在 EVM 侧的地址是 合成:按确定性方式派生为
keccak256(solana_pubkey)[12..32]。Rome EVM 程序会在链上根据交易的实际签名者派生它——它无法被伪造,而且不存在对应的 secp256k1 私钥,因此 只有 Solana 签名才能驱动这个地址.发现。 客户端向链的 RPC(
rome_emulateCallAccounts)询问 EVM 调用将触及哪些 Solana 账户;仿真还会决定哪些账户可写(调用的value必须包含——接收方余额账户是否可写取决于它)。提交。 客户端构建一个
DoTxUnsigned指令——一个 未签名的 由 Solana 签名授权的 EIP-1559 载荷——再加上计算预算指令(250KB 堆,1.35M CU),以及费用池账户发现所省略的内容。钱包只需签署一笔 Solana 交易;完成。在本次部署(2026-07-30)上测得的大小: 一次商店购买会展开为 22 个账户 并序列化为 1,061 字节 相对于 1232 字节的旧版上限——还剩 171 字节的余量,大约还能容纳 5 个账户。因此它今天并不需要查找表。若状态涉及更多内容——例如尚未创建的关联代币账户、首次持有者——仍可能超出该上限,而一旦超过 1232 字节,客户端就会回退为通过其为此目的创建的地址查找表来发送 v0 交易。
这种回退对钱包来说代价很高: 每个 ALT 扩展分块以及 v0 重新提交,都是单独的一次
signTransaction,因此一次购买会变成三到四次提示。Hadrian 已经有一个持久化的 dApp 表保存着这些合约的账户——改为引用该表才是解决方案,而路径客户端目前还做不到。确认。 交易在 Solana 上确认;EVM 视图稍后片刻才跟上(工具会在发送下一次调用前轮询 nonce)。
仅限原子执行——该路径的硬边界
DoTxUnsigned 是 一笔在一笔 Solana 交易中执行的 EVM 交易 由 Rome 的原子 VM 执行。迭代 VM——即将一次 EVM 执行拆分到多笔 Solana 交易中分阶段完成的那种——目前还无法通过这条路径访问,因此 无法以原子方式容纳的调用根本不能走这条路径。 没有可用的回退方案,也不应新增;对于无法容纳的调用,解决办法就是把调用做得更小。
有两件事常被误认为是它,但两者都不是:
v0 + 查找表回退 是一个更大的 封装,而不是不同的执行方式:它仍是同一条指令,只是装在一种可容纳更多账户密钥的交易格式中。今天测得的商店购买并不需要它(1,061/1232 字节),而即便需要,该调用也仍然是原子的。
多步骤旅程并不等同于多段执行。 Bloom 的
Run将其步骤称为 legs ——先批准,再购买——而且每一步都是 一笔完整交易,分别签名,本身即原子。Rome 也把一次拆分执行中的各个片段称为 legs。这个应用只有前者,绝不能要求后者。术语会冲突;机制不会。
下表中的每一条流程都是一笔原子交易,其中最重的一条也只占每笔交易计算上限的略高于一半——因此,对 Bloom 目前所做的任何操作而言,这条边界都还很远。
在 Rome devnet 上测得,每项各需一次签名——以下为两条链上观察到的范围:
受门控的 RWA 转账
~339–381K
wUSDC 批准
~189–191K
商店购买(批准 + 购买 = 共 2 次签名)
~730–796K
现金腿清扫到钱包自身的代币账户
~42–54K
普通数值转账
~47K
TestApprover.approve ——允许名单准入, 由钱包签名
220,794
作为比较,Solana 的单笔交易计算上限为 1.4M CU——Bloom 最重的流程也只用了略高于一半。
托管:为何 RWA 保持在合成地址中
每一种受权限控制的资产都必须回答的设计问题: 代币会不会泄出合规边界? 在 Solana 路径上,答案是结构性的,而非策略性的:
RWA 驻留在 EVM 状态中。 其余额存储在 Rome EVM 程序的账户内部。这里没有 SPL 铸币 ,没有对应的代币账户表示,也没有任何 Solana 原生对象可供转移。(这正是刻意设计——若存在包装/镜像版本,那就成了逃逸通道。)
Solana 侧的底层机制无法触及它。 该路径中用于资产转移的 legs(
create_ata、SPL 转账、清扫)都作用于 SPL 代币账户;EVM 存储余额并没有这种账户。不存在任何可将 EVM 余额转移到 Solana 代币账户的指令。只有所有者的 Solana 签名才能驱动该合成,而且它所能表达的每一种移动都是对代币合约的调用——而该合约会执行允许名单门控——因此,转账到未列入白名单的地址时,无论由 EVM 密钥还是 Solana 密钥签名,都会以相同方式回滚。
现金腿是刻意预留的例外。 wUSDC(收益、出售所得)由 SPL 支持,并且 应当 双向往返:退出腿(
transfer_spl)将其从合成地址移至钱包自己的关联代币账户,并完成端到端验证。资产仍留在边界内;现金则可自由流动。
两项实际后果,直说如下:Solana 钱包 UI 不会显示 RWA 持仓(没有可列出的 SPL 代币)——Bloom 应用才是持仓展示界面;而丢失的 Solana 密钥则通过发行方流程恢复(COMPLIANCE.md),而不是通过带外转移资产——这正是受权限控制资产所需要的特性。
最后更新于
这有帮助吗?