本文档介绍了 OpenZeppelin Relayer 的存储配置,包括内存存储和 Redis 存储两种类型。内存存储适用于开发和测试环境,而 Redis 存储适用于生产环境,并支持数据持久化和多实例部署。文档还详细说明了各种配置选项、Redis 安全性考虑以及事务存储管理。
OpenZeppelin Relayer 支持两种存储后端,用于持久化配置数据和交易状态。存储后端的选择会影响配置的管理方式、数据持久化和性能特征。
存储类型决定了你的配置更改如何持久化,以及基于文件和基于 API 的配置如何交互。为你的部署需求选择正确的存储类型。
欢迎社区贡献:欢迎来自开源社区的额外存储后端(例如 PostgreSQL、MongoDB 或其他数据库)的贡献。该存储系统被设计为可扩展的,可以很容易地添加新的存储实现。
内存存储将所有配置和交易数据保存在应用程序的内存中。
开发和测试环境
临时部署
单实例部署
不需要跨重启的数据持久化时
快速性能:无数据访问的网络开销
无外部依赖:不需要 Redis 或其他外部服务
无持久化:当容器重启时,所有数据都会丢失
单实例:不能在多个 relayer 实例之间共享
每次启动时,都会加载来自 config.json
的配置
API 更改不会同步回 config.json
文件
所有基于 API 的配置更改都会在重启时丢失
基于文件的配置始终在启动时优先
## 启用内存存储
REPOSITORY_STORAGE_TYPE=in-memory
Redis 存储将所有配置和交易数据持久化在 Redis 数据库中。
生产环境部署
多实例部署
需要数据持久化时
可扩展的环境
当基于 API 的配置更改应该持久化时
持久化:数据在容器重启后仍然存在
网络依赖:需要 Redis 连接
加密:支持静态加密来保护敏感数据
来自 config.json
的配置仅在第一次启动时加载到 Redis 中
后续启动使用存储在 Redis 中的配置
API 更改会被持久化并在重启后仍然存在
可以通过设置 RESET_STORAGE_ON_START=true
来使基于文件的配置覆盖 Redis
## 启用 Redis 存储
REPOSITORY_STORAGE_TYPE=redis
REDIS_URL=redis://localhost:6379
STORAGE_ENCRYPTION_KEY=your-encryption-key-here
环境变量 | 默认值 | 接受的值 | 描述 |
---|---|---|---|
REPOSITORY_STORAGE_TYPE |
in-memory |
in-memory, redis |
用于存储配置和交易数据的存储后端类型。 |
RESET_STORAGE_ON_START |
false |
true, false |
当为 true 时,启动时清除存储中的所有数据,并从配置文件重新加载。用于强制基于文件的配置覆盖存储的数据。 |
TRANSACTION_EXPIRATION_HOURS |
4 |
number |
事务处于最终状态后自动从存储中删除以防止存储膨胀的小时数。 |
环境变量 | 默认值 | 接受的值 | 描述 |
---|---|---|---|
REDIS_URL |
redis://localhost:6379 |
Redis 连接字符串 | Redis 实例的完整连接 URL。支持 Redis、Redis Sentinel 和 Redis Cluster 配置。 |
REDIS_CONNECTION_TIMEOUT_MS |
10000 |
number (毫秒) |
连接到 Redis 超时前等待的最大时间。 |
REDIS_KEY_PREFIX |
oz-relayer |
string |
添加到所有 Redis 键的前缀。当与其他应用程序共享 Redis 时,对于命名空间很有用。 |
STORAGE_ENCRYPTION_KEY |
`` | string (base64) |
用于在 Redis 中静态加密敏感数据的加密密钥。使用 cargo run --example generate_encryption_key 生成。 |
在生产中使用 Redis 存储时:<br>- 使用静态加密:始终设置 STORAGE_ENCRYPTION_KEY <br> <br>- 保护 Redis 访问:使用 Redis AUTH、TLS 和网络安全<br> <br>- 网络隔离:在私有网络中部署 Redis<br> <br>- 定期备份:实施 Redis 备份策略<br> <br>- 监控访问:记录和监控 Redis 访问模式 |
当提供 STORAGE_ENCRYPTION_KEY
时,敏感配置数据在存储到 Redis 之前会被加密。
加密的数据包括: - 签名者私钥和密码 - Webhook 签名密钥 - API 密钥(当存储在配置中时) - 其他敏感配置值
生成加密密钥:
## 生成安全加密密钥
cargo run --example generate_encryption_key
## 使用 OpenSSL 的替代方法
openssl rand -base64 32
交易在达到其最终状态后会自动从存储中删除,以防止存储膨胀:
## 配置交易保留期(默认:4 小时)
TRANSACTION_EXPIRATION_HOURS=8
最终交易状态:
confirmed
- 交易在区块链上确认
failed
- 交易失败,不会重试
cancelled
- 交易被用户取消
expired
: - 交易已过期
- 原文链接: docs.openzeppelin.com/re...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!