OpenZeppelin Relayer 集成 Solana 文档

本文介绍了OpenZeppelin Relayer对Solana网络的支持,包括通过Jupiter DEX实现自动化Token交换、Gasless交易、安全交易签名等功能。文章还详细说明了支持的网络配置、签名器、快速启动步骤以及Relayer策略配置,并提供了API参考、安全建议、问题排查和支持渠道。

Solana 集成

概述

OpenZeppelin Relayer 提供对 Solana 网络的强大支持,从而实现安全的交易中继、自动化的 Token 交换、无 Gas 交易和高级费用管理。本页面涵盖了你入门并充分利用 Solana 特定功能所需的一切。

功能

  • 通过 Jupiter DEX 自动进行 Token 交换(仅适用于 mainnet-beta)

  • Gasless 交易(用户或 Relayer 支付费用)

  • 使用多个签名后端进行安全交易签名

  • 交易状态监控和 nonce 管理

  • 自定义 RPC 端点和网络策略

  • 指标和可观察性

支持的网络

Solana 网络通过 JSON 配置文件定义,从而可以灵活地:

  • 配置标准 Solana 集群:mainnet-betadevnettestnet

  • 设置具有特定 RPC 端点的自定义 Solana 兼容网络

  • 使用从基本配置的继承来创建网络变体

Solana 网络配置示例:

{
  "networks": [\
    {\
      "type": "solana",\
      "network": "solana-mainnet",\
      "rpc_urls": ["https://api.mainnet-beta.solana.com"],\
      "explorer_urls": ["https://explorer.solana.com"],\
      "is_testnet": false,\
      "tags": ["mainnet", "solana"]\
    },\
    {\
      "type": "solana",\
      "network": "solana-devnet",\
      "rpc_urls": ["https://api.devnet.solana.com"],\
      "explorer_urls": ["https://explorer.solana.com?cluster=devnet"],\
      "is_testnet": true,\
      "tags": ["devnet", "solana"]\
    },\
    {\
      "type": "solana",\
      "network": "solana-custom",\
      "rpc_urls": ["https://your-custom-solana-rpc.example.com"],\
      "tags": ["custom", "solana"]\
    }\
  ]
}

有关详细的网络配置选项,请参阅 网络配置 指南。

支持的签名器

  • vault_transit (hosted)

  • turnkey (hosted)

  • google_cloud_kms (hosted)

  • local (local)

  • vault (local)

在生产系统中,建议使用托管签名器以获得最佳安全模型。

快速入门

有关分步设置,请参阅 快速入门指南。主要先决条件:

  • Rust 2021,版本 1.86 或更高版本

  • Redis

  • Docker(可选)

Solana Relayer 的配置示例:

{
  "id": "solana-example",
  "name": "Solana Example",
  "network": "devnet",
  "paused": false,
  "notification_id": "notification-example",
  "signer_id": "local-signer",
  "network_type": "solana",
  "custom_rpc_urls": [\
    { "url": "https://primary-solana-rpc.example.com", "weight": 100 },\
    { "url": "https://backup-solana-rpc.example.com", "weight": 100 }\
  ],
  "policies": {
    "fee_payment_strategy": "user",
    "min_balance": 0,
    "allowed_tokens": [\
      { "mint": "So111...", "max_allowed_fee": 100000000 }\
    ],
    "swap_config": {
      "strategy": "jupiter-swap",
      "cron_schedule": "0 0 * * * *",
      "min_balance_threshold": 1000000,
      "jupiter_swap_options": {
        "dynamic_compute_unit_limit": true,
        "priority_level": "high",
        "priority_fee_max_lamports": 1000000000
      }
    }
  }
}

有关更多配置示例,请访问 OpenZeppelin Relayer 示例存储库

配置

Relayer 策略

除了标准的中继器配置和策略之外,Solana 中继器还支持其他选项:

  • fee_payment_strategy"user""relayer"(谁支付交易费用)

  • allowed_tokens:支持交换和费用支付的 SPL Token 列表

  • allowed_programsallowed_accountsdisallowed_accounts:将中继器操作限制为特定程序/帐户

  • swap_config:自动 Token 交换设置(请参见下文)

你可以在 用户文档-Relayers 中查看所有选项。

自动 Token 交换配置选项:

  • strategy:要使用的交换引擎。支持的值:"jupiter-swap" (Jupiter Swap API), "jupiter-ultra" (Jupiter Ultra API)。

  • cron_schedule:Cron 表达式,用于定义应多久运行一次计划的交换(例如,"0 0 * * * *" 表示每小时)。

  • min_balance_threshold:触发交换的最小 Token 余额(以 lamports 为单位)。如果中继器的余额低于此值,则会尝试交换。

  • jupiter_swap_options:Jupiter 交换的高级选项,例如:

  • dynamic_compute_unit_limit:如果为 true,则动态调整交换交易的计算单元。

  • priority_level:交换交易的优先级。支持的值:"medium""high""veryHigh"

  • priority_fee_max_lamports:为交换交易支付的最大优先级费用(以 lamports 为单位)。

  • 每个 Token 的交换限制:

  • min_amount:单次操作中要交换的 Token 的最小数量。

  • max_amount:单次操作中要交换的 Token 的最大数量。

  • retain_min_amount:在交换后要在中继器帐户中保留的 Token 的最小数量(防止交换整个余额)。

自动 Token 交换

当用户 fee_payment_strategy 用于使用以下方式的 Relayer 时,Relayer 可以在 Solana 上执行自动 Token 交换:

  • jupiter-swap – 通过 Jupiter Swap API

  • jupiter-ultra – 通过 Jupiter Ultra API

可以将交换设置为以下方式工作:

  • 计划的交换:后台作业根据你的 cron 计划运行交换。

  • 按需交换:如果交易因资金不足而失败,则 Relayer 会尝试交换,然后再返回错误。

API 参考

Solana API 符合 Paymaster 规范

常用端点: - POST /api/v1/relayers/<relayer_id>/rpc 方法:

  • feeEstimate,

  • prepareTransaction,

  • transferTransaction,

  • signTransaction,

  • signAndSendTransaction,

  • getSupportedTokens

  • getSupportedFeatures

示例:估算交易费用

curl --location --request POST 'http://localhost:8080/api/v1/relayers/solana-example/rpc' \
--header 'Authorization: Bearer <api_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "jsonrpc": "2.0",
  "method": "feeEstimate",
  "params": {
    "transaction": "<base64-encoded-tx>",
    "fee_token": "<mint-address>"
  },
  "id": 1
}'

有关完整的详细信息和示例,请参见 API 参考SDK 示例

安全

  • 不要将中继器直接暴露于公共互联网。

  • 部署在安全后端(反向代理、防火墙)之后。

  • 在生产系统中使用托管签名器。

故障排除

  • 检查环境变量和配置文件是否存在错误

  • 查看容器日志以查找问题

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

0 条评论

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