本文档介绍了 OpenZeppelin Relayer,一个为 dApp 提供与 EVM 和非 EVM 网络交互的基础设施服务。它支持多链交互、交易转发、签名、费用估算、Gasless 交易等功能,并提供了 SDK 集成、可扩展架构和配置化的网络策略。文档还包括了技术概述、项目结构、入门指南、配置说明、部署注意事项以及支持和许可信息。
OpenZeppelin Relayer 是一种服务,提供基础设施以将交易中继到 EVM 和非 EVM 网络。它旨在用作需要与这些网络交互的 dApp 的后端。
多链支持:与包括 Solana 和基于 EVM 的链在内的多个区块链网络交互。
交易中继:高效地将交易提交到受支持的区块链网络。
交易签名:使用可配置的密钥管理安全地签署交易。
交易费用预估:预估交易费用,以便更好地进行成本管理。
Solana Gasless 交易:支持 Solana 上的 gasless 交易,使用户无需交易费用即可进行交互。
交易 Nonce 管理:处理 nonce 管理以确保交易顺序。
交易状态监控:跟踪已提交交易的状态。
SDK 集成:通过我们的配套 JavaScript/TypeScript SDK 轻松与 relayer 交互。
可扩展的架构:轻松添加对新区块链网络的支持。
可配置的网络策略:定义并执行用于交易处理的特定于网络的策略。
指标和可观察性:使用 Prometheus 和 Grafana 监控应用程序性能。
Docker 支持:使用 Docker 部署 relayer,用于开发和生产环境。
插件:使用 TypeScript 函数通过自定义逻辑扩展 relayer 的功能。
OpenZeppelin Relayer 通过灵活的基于 JSON 的配置系统支持多个区块链网络。网络在配置文件中定义,允许你配置:
任何兼容 EVM 的网络(Ethereum、Polygon、BSC、Arbitrum、Optimism 等)
Solana 网络(mainnet-beta、devnet、testnet、自定义 RPC 端点)
Stellar 网络(Pubnet、Testnet、自定义网络)
创建具有特定 RPC 端点、链 ID 和网络参数的自定义网络配置
使用继承 来创建从基本配置继承的网络变体
网络类型 | 描述 |
---|---|
evm |
以太坊虚拟机兼容网络。通过配置链 ID、RPC URL 和特定于网络的参数来支持任何 EVM 链。 |
solana |
Solana 区块链网络。支持所有 Solana 集群和自定义 RPC 端点。 |
stellar |
Stellar 区块链网络(部分支持)。支持 Stellar 公共网络和测试网。 |
可以从以下位置加载网络:
JSON 数组:配置文件中的直接网络定义
文件目录:多个 JSON 文件,每个文件都包含网络定义
有关详细的网络配置选项和示例,请参阅 网络配置 页面。
有关我们的开发计划和即将推出的功能的信息,请参阅 项目路线图。 |
要立即开始使用, 请参阅 快速入门。 |
外部系统
OpenZeppelin Relayer
客户端
API层
领域层
基础设施
服务层
配置
HTTP 请求
处理请求
验证和路由
调用
使用
实行
处理
与...互动
使用...签名
通过...连接
队列作业
通知
收集
可以使用
存储数据
异步处理
秘密管理
与...互动
配置
配置
区块链网络
Redis
HashiCorp Vault
Prometheus/Grafana
通知服务
配置文件
环境变量
交易服务
Vault 服务
Webhook 通知
监控和指标
存储库
作业队列系统
签名者服务
网络提供商
领域逻辑
Relayer 服务
策略执行
API 路由和控制器
中间件
插件
API/SDK
该项目遵循标准的 Rust 项目布局:
openzeppelin-relayer/
├── src/
│ ├── api/ # 路由和控制器逻辑
│ ├── bootstrap/ # 服务初始化逻辑
│ ├── config/ # 配置逻辑
│ ├── constants/ # 系统中使用的常量值
│ ├── domain/ # 领域逻辑
│ ├── jobs/ # 异步处理逻辑(排队)
│ ├── logging/ # 日志文件轮换逻辑
│ ├── metrics/ # 指标逻辑
│ ├── models/ # 数据结构和类型
│ ├── repositories/ # 配置存储
│ ├── services/ # 服务逻辑
│ └── utils/ # 辅助函数
│
├── config/ # 配置文件
├── tests/ # 集成测试
├── docs/ # 文档
├── scripts/ # 实用程序脚本
├── examples/ # 配置示例
├── helpers/ # Rust 辅助脚本
├── plugins/ # 插件目录
└── ... 其他根文件 (Cargo.toml, README.md, 等)
有关每个目录及其内容的详细信息,请参阅 项目结构详细信息。
Rust 2021 版本,版本 1.86
或更高版本
Docker(可选,用于容器化部署)
Node.js、typescript 和 ts-node(可选,用于插件)
现成的示例配置<br>要使用各种配置进行快速设置,请查看我们的 GitHub 存储库中的 examples directory:<br>- basic-example : 使用 Redis 的简单设置<br> <br>- basic-example-logging : 具有基于文件记录的配置<br> <br>- basic-example-metrics : 具有 Prometheus 和 Grafana 指标的设置<br> <br>- vault-secret-signer : 使用 HashiCorp Vault 进行密钥管理<br> <br>- vault-transit-signer : 使用 Vault Transit 进行安全签名<br> <br>- evm-gcp-kms-signer : 使用 Google Cloud KMS 进行 EVM 安全签名<br> <br>- evm-turnkey-signer : 使用 Turnkey 进行 EVM 安全签名<br> <br>- solana-turnkey-signer : 使用 Turnkey 进行 Solana 安全签名<br> <br>- redis-storage : 使用 Redis 进行存储<br> <br>- network-configuration-config-file : 通过配置文件使用自定义网络配置<br> <br>- network-configuration-json-file : 通过 JSON 文件使用自定义网络配置<br> <br>每个示例都包含一个 README,其中包含逐步说明和 Docker Compose 配置。 |
git clone https://github.com/openzeppelin/openzeppelin-relayer
cd openzeppelin-relayer
从此处安装稳定的 libsodium 版本。
按照 libsodium 安装指南 中的步骤操作。
cargo build
cargo run
在执行命令之前,请确保按照配置参考部分中的详细说明配置 .env 和 config.json 文件。 |
Relayer 可以使用相应的 Dockerfile(Dockerfile.development
或 Dockerfile.production
)作为开发或生产容器运行。
编辑存储库根目录下的 .env
以调整环境变量
适当的 .env 文件将在映像构建期间包含在内
你可以使用 Docker Compose (v2) 进行构建。
## 默认构建
docker compose build
## 或者,对于更精简的镜像(并使用 Dockerfile.production)
DOCKERFILE=Dockerfile.production docker compose build
使用 Docker Compose 运行容器:
docker compose up -d
对于生产运行,你可以使用:
DOCKERFILE=Dockerfile.production docker compose up -d
OpenZeppelin Relayer 支持两种配置方法:
基于文件的配置:
- config.json
: 包含 relayer 定义、签名者配置和网络策略
- .env
: 包含环境变量,如 API 密钥和连接字符串
基于 API 的配置: - 通过 REST API 进行运行时配置管理 - 配置更改无需重启服务 - 完整的 relayer、签名者和通知的 CRUD 操作
这两种方法可以一起使用。 基于文件的配置在启动时加载,而 API 更改提供运行时灵活性。 对环境变量(.env )的更改始终需要重启容器。<br> 一起使用时,API 更改不会同步到基于文件的配置。 使用持久存储模式时,基于文件的配置仅加载一次。<br> 有关使用预配置文件的快速设置示例,请参阅我们的 GitHub 存储库中的 examples directory。 |
有关全面的配置详细信息,包括:
环境变量及其设置
主配置文件结构
签名者配置(本地、vault、云 KMS 等)
通知设置
Relayer 策略和网络设置
插件配置
完整的配置示例
请参阅专门的 配置指南。
OpenZeppelin Relayer 旨在用作后端服务,不应直接暴露于公共互联网。 为了保护服务免受未经授权的访问,请将其部署在你自己的安全后端基础设施(例如反向代理或防火墙)之后,并将访问权限限制为仅受信任的内部组件。 直接暴露可能会增加被利用和安全漏洞的风险。 |
如需支持或咨询,请通过 Telegram 与我们联系。
本项目根据 GNU Affero General Public License v3.0 获得许可 - 有关详细信息,请参阅 LICENSE 文件。
有关安全问题,请参阅我们的 安全策略。
- 原文链接: docs.openzeppelin.com/re...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!