OpenZeppelin Relayer 文档 EVM 集成

本文档介绍了OpenZeppelin Relayer对EVM(以太坊虚拟机)网络的支持,包括安全交易中继、高级Gas管理、EIP-1559支持和强大的费用估算。主要内容包括支持的网络、签名者、快速开始指南、配置、API参考、交易生命周期和安全最佳实践。

EVM 集成

概述

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 管理配置

Gas 价格上限

设置最大 gas 价格以防止出现极端的网络拥塞:

{
  "policies": {
    "gas_price_cap": 100000000000  // 最大 100 Gwei
  }
}
Gas 限制估算

启用或禁用自动 gas 限制估算:

{
  "policies": {
    "gas_limit_estimation": true  // 启用自动估算
  }
}

禁用后,必须在交易请求中明确提供 gas 限制。

中继器使用两层方法进行 gas 限制估算:

  1. 主要方法:使用 RPC estimate_gas 方法计算 gas 需求
  • 估计值增加 10% 作为安全缓冲

  • 为大多数交易类型提供准确的估计

  1. 回退方法:当 RPC 估算失败时,根据交易类型应用默认 gas 限制:
  • 简单的 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"\
    ]
  }
}

API 参考

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"
  }
}'

发送交易 - 包含 gas 限制的速度参数

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
  }
}'

具有 EIP-1559 定价的交易

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,
  }
}'

具有传统定价的交易 - 包含 gas 估算

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 参考

交易生命周期

1. 交易提交

  • 验证交易参数

  • 检查白名单策略(如果已启用)

  • 估算 gas 限制(如果未提供)

  • 根据网络状况计算 gas 价格

2. 交易签名

  • 使用配置的签名器对交易进行签名

  • 生成适当的签名格式

3. 交易广播

  • 通过 RPC 端点提交到网络

  • 通过自动重试处理 RPC 故障

  • 如果需要,切换到备份 RPC 端点

4. 交易监控

  • 跟踪交易状态和确认

  • 如果需要,处理交易替换

  • 发送有关状态更改的通知

5. 交易确认

  • 等待所需的确认数

  • 将交易标记为已确认或失败

  • 清理资源

安全最佳实践

网络安全

  • 在生产中使用私有 RPC 端点

  • 配置适当的 gas_price_cap 以防止过高的费用

  • 为受控环境启用 whitelist_receivers

  • 监控中继器余额并设置适当的 min_balance

签名器安全

  • 在生产中使用托管签名器(AWS KMS、Google Cloud KMS、Turnkey)

  • 定期轮换签名器密钥

  • 实施适当的访问控制和审计日志记录

  • 切勿以纯文本形式存储私钥

运营安全

  • 部署在安全反向代理后面

  • 对所有通信使用 HTTPS

  • 实施适当的速率限制

  • 监控异常交易模式

监控和可观察性

启用指标并监控:

  • 交易成功率

  • Gas 价格趋势

  • RPC 端点性能

  • 中继器余额水平

  • 失败的交易模式

支持

如需 EVM 集成方面的帮助:

许可证

本项目根据 GNU Affero General Public License v3.0 获得许可。

← 存储配置

Solana 集成 →

  • 原文链接: docs.openzeppelin.com/re...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
OpenZeppelin
OpenZeppelin
江湖只有他的大名,没有他的介绍。