本文档介绍了OpenZeppelin Relayer对EVM(以太坊虚拟机)网络的支持,包括安全交易中继、高级Gas管理、EIP-1559支持和强大的费用估算。主要内容包括支持的网络、签名者、快速开始指南、配置、API参考、交易生命周期和安全最佳实践。
OpenZeppelin Relayer 提供对 EVM (以太坊虚拟机) 网络的全面支持,支持安全的交易中继、高级 gas 管理、EIP-1559 支持和强大的费用估算。本页涵盖了入门和充分利用 EVM 特定功能所需的一切。
具有 EIP-1559 支持的高级 gas 价格管理
具有回退机制的动态 gas 限制估算
交易替换和加速
多网络支持(以太坊、Arbitrum、Optimism、BSC、Polygon 等)
具有负载平衡和故障转移的自定义 RPC 端点
使用多个签名器后端进行安全交易签名
交易状态监控和确认跟踪
基于白名单的安全策略
指标和可观察性
EVM 网络通过 JSON 配置文件定义,从而可以灵活地:
配置任何 EVM 兼容网络(以太坊、Polygon、BSC、Arbitrum、Optimism 等)
使用特定的 RPC 端点设置自定义 EVM 兼容网络
使用从基本配置的继承来创建网络变体
支持 Layer 1 和 Layer 2 网络
有关详细的网络配置选项,请参阅网络配置指南。
local
(本地密钥库文件)
vault
(HashiCorp Vault 密钥存储)
vault_cloud
(托管的 HashiCorp Vault)
turnkey
(托管的 Turnkey 签名器)
google_cloud_kms
(Google Cloud KMS)
aws_kms
(Amazon AWS KMS)
有关详细的签名器配置选项,请参阅签名器指南。
在生产系统中,建议使用托管签名器(AWS KMS、Google Cloud KMS、Turnkey)以获得最佳安全模型。 |
有关分步设置,请参阅快速入门指南。 主要先决条件:
Rust 2021,版本 1.86
或更高版本
Redis
Docker(可选)
EVM 中继器的配置示例:
{
"id": "sepolia-example",
"name": "Sepolia Example",
"network": "sepolia",
"paused": false,
"notification_id": "notification-example",
"signer_id": "local-signer",
"network_type": "evm",
"custom_rpc_urls": [\
{\
"url": "https://primary-rpc.example.com",\
"weight": 100\
},\
{\
"url": "https://backup-rpc.example.com",\
"weight": 100\
}\
],
"policies": {
"gas_price_cap": 100000000000,
"eip1559_pricing": true,
"gas_limit_estimation": true,
"whitelist_receivers": [\
"0x1234567890123456789012345678901234567890",\
"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"\
],
"min_balance": 1000000000000000000
}
},
有关更多配置示例,请访问 OpenZeppelin Relayer 示例存储库。
除了标准的中继器配置和策略之外,EVM 中继器还支持其他选项:
gas_price_cap
: 交易的最高 gas 价格限制(以 wei 为单位)
gas_limit_estimation
:启用/禁用自动 gas 限制估算
whitelist_receivers
:交易的授权合约地址列表
min_balance
:中继器运行所需的最低余额(以 wei 为单位)
eip1559_pricing
:启用/禁用 EIP-1559 定价方法以收取交易费用
你可以在用户文档 - 中继器中查看所有选项。
设置最大 gas 价格以防止出现极端的网络拥塞:
{
"policies": {
"gas_price_cap": 100000000000 // 最大 100 Gwei
}
}
启用或禁用自动 gas 限制估算:
{
"policies": {
"gas_limit_estimation": true // 启用自动估算
}
}
禁用后,必须在交易请求中明确提供 gas 限制。
中继器使用两层方法进行 gas 限制估算:
estimate_gas
方法计算 gas 需求估计值增加 10% 作为安全缓冲
为大多数交易类型提供准确的估计
简单的 ETH 转账(无数据):21,000 gas
ERC20 转账 ( 0xa9059cbb
): 65,000 gas
ERC721/ERC20 transferFrom ( 0x23b872dd
): 80,000 gas
复杂的合约(所有其他函数调用):200,000 gas
对于使用复杂交易或自定义合约的高级用户,建议在交易请求中包含显式的 gas_limit 参数,以确保最佳的 gas 使用率并避免估算错误。 |
将交易限制为特定的合约地址:
{
"policies": {
"whitelist_receivers": [\
"0x1234567890123456789012345678901234567890",\
"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"\
]
}
}
EVM API 提供全面的交易管理功能。
常用端点:
POST /api/v1/relayers/<relayer_id>/transactions
发送交易
GET /api/v1/relayers/<relayer_id>/transactions
列出交易
GET /api/v1/relayers/<relayer_id>/transactions/<transaction_id>
按 id 获取交易
curl --location --request POST 'http://localhost:8080/api/v1/relayers/solana-example/transactions' \
--header 'Authorization: Bearer <api_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
{
"value": 1,
"data": "0x",
"to": "0xd9b55a2ba539031e3c18c9528b0dc3a7f603a93b",
"speed": "average"
}
}'
curl --location --request POST 'http://localhost:8080/api/v1/relayers/solana-example/transactions' \
--header 'Authorization: Bearer <api_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
{
"value": 1,
"data": "0x",
"to": "0xd9b55a2ba539031e3c18c9528b0dc3a7f603a93b",
"speed": "average",
"gas_limit": 21000
}
}'
curl --location --request POST 'http://localhost:8080/api/v1/relayers/solana-example/transactions' \
--header 'Authorization: Bearer <api_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
{
"value": 1,
"data": "0x",
"to": "0xd9b55a2ba539031e3c18c9528b0dc3a7f603a93b",
"max_fee_per_gas": 30000000000,
"max_priority_fee_per_gas": 20000000000,
}
}'
curl --location --request POST 'http://localhost:8080/api/v1/relayers/solana-example/transactions' \
--header 'Authorization: Bearer <api_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
{
"value": 1,
"data": "0x",
"to": "0xd9b55a2ba539031e3c18c9528b0dc3a7f603a93b",
"gas_price": "12312313123"
}
}'
curl --location --request GET 'http://localhost:8080/api/v1/relayers/solana-example/transactions/<transaction_id>' \
--header 'Authorization: Bearer <api_key>'
有关完整详细信息和示例,请参阅API 参考。
验证交易参数
检查白名单策略(如果已启用)
估算 gas 限制(如果未提供)
根据网络状况计算 gas 价格
使用配置的签名器对交易进行签名
生成适当的签名格式
通过 RPC 端点提交到网络
通过自动重试处理 RPC 故障
如果需要,切换到备份 RPC 端点
跟踪交易状态和确认
如果需要,处理交易替换
发送有关状态更改的通知
等待所需的确认数
将交易标记为已确认或失败
清理资源
在生产中使用私有 RPC 端点
配置适当的 gas_price_cap
以防止过高的费用
为受控环境启用 whitelist_receivers
监控中继器余额并设置适当的 min_balance
在生产中使用托管签名器(AWS KMS、Google Cloud KMS、Turnkey)
定期轮换签名器密钥
实施适当的访问控制和审计日志记录
切勿以纯文本形式存储私钥
部署在安全反向代理后面
对所有通信使用 HTTPS
实施适当的速率限制
监控异常交易模式
启用指标并监控:
交易成功率
Gas 价格趋势
RPC 端点性能
中继器余额水平
失败的交易模式
如需 EVM 集成方面的帮助:
加入我们的 Telegram 社区
在我们的 GitHub 存储库 上提出问题
查看我们的综合文档
本项目根据 GNU Affero General Public License v3.0 获得许可。
- 原文链接: docs.openzeppelin.com/re...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!