Solana 集成 - OpenZeppelin 文档

本文档介绍了 OpenZeppelin Relayer 对 Solana 网络的支持,包括自动代币交换、Gasless 交易、安全交易签名等功能。同时,还涵盖了支持的网络配置、签名器、快速入门指南、Relayer 策略配置、自动化代币交换以及 API 参考和安全注意事项。

Solana 集成

概述

OpenZeppelin Relayer 提供对 Solana 网络的强大支持,从而实现安全的交易中继、自动化的 token 交换、gasless 交易和高级费用管理。本页涵盖了你入门以及充分利用 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 (托管)

  • turnkey (托管)

  • google_cloud_kms (托管)

  • local (本地)

  • vault (本地)

  • vault_cloud (本地)

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

快速入门

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

  • Rust 2021 edition

  • 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 策略

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

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

  • allowed_tokens: 支持进行交换和费用支付的 SPL token 列表

  • allowed_programsallowed_accountsdisallowed_accounts: 将 relayer 操作限制为特定的程序/帐户

  • 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 为单位)。如果 relayer 的余额低于此值,则会尝试交换。

  • 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: 交换后要在 relayer 帐户中保留的 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 示例

安全

  • 不要将 relayer 直接暴露给公共互联网。

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

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

故障排除

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

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

路线图

支持

如需帮助,请加入我们的 Telegram 或在 GitHub 上打开一个 issue。

许可证

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

← 项目路线图

插件 →

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

0 条评论

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