OpenZeppelin Relayer - 存储配置文档

本文档介绍了 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 存储将所有配置和交易数据持久化在 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 特有设置

环境变量 默认值 接受的值 描述
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 安全

在生产中使用 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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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