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

部署 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"

网络配置

网络
RPC URL
链 ID
区块浏览器

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 流程部署的生产示例:

二者都可在不修改合约的情况下获得 Solana 执行能力和 CPI 组合性。

部署限制

约束
限制
说明

合约最大大小

24 KB

与 Ethereum 相同(EIP-170,24,576 字节)

交易大小限制

每个 holder 80 KB

大型部署会透明地拆分到多个 holder 账户

计算预算

约 140 万 CU(原子)

对复杂合约使用迭代模式

Solidity 版本

推荐 0.8.28

更早的版本也可用,但 0.8.28 与 SDK 一致

常见错误

错误
原因
修复方法

Gas 资金不足

EVM 地址没有 Gas 代币

测试网:通过 Rome App (参见 快速开始);Rubicon:使用 Rome Bridge

nonce 过低

钱包中的 nonce 已过期

重置 MetaMask 账户或手动指定 nonce

执行已回滚

合约逻辑执行失败

使用以下方式调试 eth_call 或 forge test --fork-url

交易出价过低

Gas 价格低于最低值

提高交易中的 Gas 价格

下一步

最后更新于

这有帮助吗?