部署 Solidity 合约
使用 Hardhat 或 Foundry 在 Solana 上部署 Solidity 智能合约——Rome 网络配置、已注资账户以及分步部署。
本指南介绍如何使用 Hardhat 和 Foundry 在 Rome EVM 上部署 Solidity 智能合约。
前置条件
已安装 Node.js v22.13+(Hardhat)或 Foundry
一个已充值的 Rome EVM 地址(参见 快速开始)
你的私钥已导出为环境变量
export PRIVATE_KEY="0xYOUR_PRIVATE_KEY"网络配置
Hadrian(devnet)
https://hadrian.testnet.romeprotocol.xyz/
200010
via-hadrian.testnet.romeprotocol.xyz
Martius(testnet)
https://martius.testnet.romeprotocol.xyz/
121214
via-martius.testnet.romeprotocol.xyz
Rubicon(mainnet)
https://rubicon.mainnet.romeprotocol.xyz/
7531
via-rubicon.mainnet.romeprotocol.xyz
每个网络的 Gas 都使用 USDC。在测试网中,你可以通过桥接测试网 USDC 或从 Solana devnet 钱包封装获得(水龙头);在 Rubicon 上,则可使用 Rome Bridge。使用你在 Hadrian 上测试过的相同构建产物部署到 Rubicon——仅链 ID 和包装器地址不同。
Hardhat
设置
mkdir my-rome-project && cd my-rome-project
npx hardhat --init接受默认选项(Hardhat 3、当前目录、TypeScript + viem 模板);依赖项会自动安装。
hardhat.config.ts
configVariable("PRIVATE_KEY") 从环境变量(或加密密钥库—— npx hardhat keystore set PRIVATE_KEY).
部署
在区块浏览器上验证
需要来自 验证合约 在你的 hardhat.config.ts.
Foundry
设置
部署
调用已部署合约
使用 Rome Solidity SDK
对于与 Solana 程序交互的合约,请使用公共 rome-solidity 仓库中的接口。它是从 GitHub 安装的,而不是从 npm:
在……之外的合约 interface.sol 以及预言机接口(例如 ERC-20 包装器和工厂)会导入 OpenZeppelin。使用 npm 时,它会作为依赖项一并安装。使用 Foundry 时,还请运行 forge install OpenZeppelin/openzeppelin-contracts 并添加映射 @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/.
使用 npm 时,该包会安装为 @rome-protocol/rome-solidity,因此下面的导入会从 node_modules中解析。使用 Foundry 时,映射会使相同的导入从 lib/rome-solidity.
迁移现有协议
任何 Solidity 合约都可以无需修改部署到 Rome——无论是合规合约、DeFi 协议,还是现有的成熟应用。以下是两个可直接 fork 并使用上述相同 Hardhat / Foundry 流程部署的生产示例:
compound-on-rome-comet — 经典的 Compound v3(Comet),标准 Foundry。
rome-aave-v3 — 经典的 Aave v3。
二者都可在不修改合约的情况下获得 Solana 执行能力和 CPI 组合性。
部署限制
合约最大大小
24 KB
与 Ethereum 相同(EIP-170,24,576 字节)
交易大小限制
每个 holder 80 KB
大型部署会透明地拆分到多个 holder 账户
计算预算
约 140 万 CU(原子)
对复杂合约使用迭代模式
Solidity 版本
推荐 0.8.28
更早的版本也可用,但 0.8.28 与 SDK 一致
常见错误
nonce 过低
钱包中的 nonce 已过期
重置 MetaMask 账户或手动指定 nonce
执行已回滚
合约逻辑执行失败
使用以下方式调试 eth_call 或 forge test --fork-url
交易出价过低
Gas 价格低于最低值
提高交易中的 Gas 价格
下一步
向 Solana 用户开放你的合约 — 让 Solana 钱包用户调用你刚部署的内容
从 EVM 调用 Solana — 使用 CPI 预编译与 Solana 程序交互
验证合约 — 将源代码发布到区块浏览器
最后更新于
这有帮助吗?