本文档介绍了 OpenZeppelin Relayer 对 Solana 网络的支持,包括自动代币交换、Gasless 交易、安全交易签名等功能。同时,还涵盖了支持的网络配置、签名器、快速入门指南、Relayer 策略配置、自动化代币交换以及 API 参考和安全注意事项。
OpenZeppelin Relayer 提供对 Solana 网络的强大支持,从而实现安全的交易中继、自动化的 token 交换、gasless 交易和高级费用管理。本页涵盖了你入门以及充分利用 Solana 特定功能所需的一切。
通过 Jupiter DEX 自动进行 token 交换(仅限 mainnet-beta)
Gasless 交易(用户或 relayer 支付费用)
使用多个签名者后端安全地进行交易签名
交易状态监控和 nonce 管理
自定义 RPC 端点和网络策略
指标和可观察性
Solana 网络通过 JSON 配置文件定义,从而可以灵活地:
配置标准的 Solana 集群:mainnet-beta
、devnet
、testnet
使用特定的 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 配置和策略之外,Solana relayers 还支持其他选项:
fee_payment_strategy
: "user"
或 "relayer"
(谁支付交易费用)
allowed_tokens
: 支持进行交换和费用支付的 SPL token 列表
allowed_programs
、allowed_accounts
、disallowed_accounts
: 将 relayer 操作限制为特定的程序/帐户
swap_config
:自动 token 交换设置(见下文)
你可以在 用户文档 - Relayers 中查看所有选项。
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 的最小数量(防止交换整个余额)。
当用户使用 fee_payment_strategy 为 relayer 时,relayer 可以在 Solana 上执行自动 token 交换,使用:
jupiter-swap – 通过 Jupiter Swap API
jupiter-ultra – 通过 Jupiter Ultra API
可以设置交换工作方式:
计划交换:后台作业根据你的 cron 计划运行交换。
按需交换:如果交易由于资金不足而失败,则 relayer 会尝试交换,然后再返回错误。
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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!