计算预算
Rome EVM 操作的 Solana 计算单元(CU)成本——原子与迭代预算,以及如何设计高效使用 CU 的 Solidity 合约。
每笔 Solana 交易都有以计算单元(CU)衡量的计算预算。理解 CU 成本有助于你设计高效的 Rome 合约。
预算概览
原子模式(VmAt)
~1,400,000 CU
单笔 Solana 交易
迭代模式(VmIt)
无限制(多笔交易)
自适应操作码/步骤——按每笔交易的 CU 预算打包
每笔 Solana 交易的默认预算为 200,000 CU,可通过计算预算指令扩展至约 140 万 CU(由 Rome SDK 自动添加)。
CU 成本估算
EVM 操作
签名验证(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
冷访问与热访问
预编译操作
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:
下一步
约束 — 限制和边界的完整列表
最后更新于
这有帮助吗?