For the complete documentation index, see llms.txt. This page is also available as Markdown.

计算预算

Rome EVM 操作的 Solana 计算单元(CU)成本——原子与迭代预算,以及如何设计高效使用 CU 的 Solidity 合约。

每笔 Solana 交易都有以计算单元(CU)衡量的计算预算。理解 CU 成本有助于你设计高效的 Rome 合约。

预算概览

模式
最大 CU
备注

原子模式(VmAt)

~1,400,000 CU

单笔 Solana 交易

迭代模式(VmIt)

无限制(多笔交易)

自适应操作码/步骤——按每笔交易的 CU 预算打包

每笔 Solana 交易的默认预算为 200,000 CU,可通过计算预算指令扩展至约 140 万 CU(由 Rome SDK 自动添加)。

CU 成本估算

EVM 操作

操作
近似 CU
备注

签名验证(ecrecover)

~5,000 CU

通过 Solana 系统调用实现的 secp256k1

简单转账

~50,000-100,000 CU

仅更新余额

ERC-20 转账

~100,000-150,000 CU

包含 SPL 预编译调用

合约部署(小型)

~200,000-400,000 CU

取决于字节码大小

存储写入(SSTORE)

~5,000-20,000 CU

冷访问与热访问

预编译操作

预编译
近似 CU

ecrecover

~3,000-5,000 CU

SHA-256

~1,000 CU

BN254 ecAdd

~10,000 CU

BN254 ecMul

~40,000 CU

BN254 ecPairing

~200,000+ CU

优化技巧

1. 在热点路径中使用 Yul

Solidity 的优化器会生成相当不错的代码,但 Yul(内联汇编)可以显著降低关键操作的 CU:

2. 缓存 PDA 推导

通过以下方式推导 PDA: find_program_address 成本较高。将推导出的 PDA 存储在合约存储中,而不是在每次调用时重新计算:

3. 硬编码已知的程序 ID

不要从存储中加载程序 ID——改用常量:

4. 最小化账户数量

Solana 交易中的每个账户都会增加 CU 开销。可通过以下方式减少账户数量:

  • 将共享账户的操作批量处理

  • 使用更少的中间账户

  • 避免重复的 ATA 创建检查

5. 使用优化器设置

使用以下命令构建: npx hardhat compile --build-profile production.

测量 CU 消耗

使用 eth_estimateGas 在提交前测量 CU:

或者通过 ethers.js:

下一步

  • 约束 — 限制和边界的完整列表

最后更新于

这有帮助吗?