提案:把"免 gas 购买 relayer"能力纳入 DVT 节点网络
背景
Mycelium launch 代币销售(aPoints/GToken)的免 gas 购买目前依赖一个独立的中心化 relayer——一个 Cloudflare Worker(mycelium-relayer.jhfnetboy.workers.dev,源码在 mycelium/launch repo 的 services/relayer)。
SDK 侧(@aastar/tokens 的 TokenSaleClient.buyGasless)的流程:
- 用户在浏览器签两个 typed-data:EIP-3009 USDC
TransferWithAuthorization(给 BuyHelper)+ EIP-712 BuyIntent(domain MyceliumBuyHelper)。
- SDK POST 到 relayer
/v3/relay,载荷 { intent, buyIntentSig, transferAuth{v,r,s} }。
- relayer 代付 gas,经
BuyHelper 把 USDC→目标 token 的购买上链,返回 txHash。
relayer 当前职责(services/relayer/src):/relay·/v3/relay 路由、BuyIntent/EIP-3009 提取与校验(pipeline/extractIntent)、规则引擎(rules/)、限流(rateLimit.ts)、用 operator 私钥签名并提交交易。
诉求
把这个 gasless relay 能力纳入 DVT 节点(aNode)网络 —— 让 relay 成为 DVT 基础设施的一项去中心化能力,而不是单点的 Cloudflare Worker。
为什么放 DVT
- DVT 节点已经是 operator 运营的链下基础设施(目前做 BLS 聚合)。让它们同时承担 gasless relay,天然契合"operator 经济 + gas 代付"模型。
- 去单点:当前 relayer 是单个 Cloudflare Worker(单点故障 + 单点信任 + 单 operator 私钥付 gas)。多个 DVT 节点提供 relay → 冗余 + 抗审查。
- 协议已成形:relay 的输入是确定性的(
BuyIntent + EIP-3009 签名),节点只需校验签名/规则/限流并提交——无状态、易水平扩展。
建议范围(供讨论,非强约束)
- DVT 节点暴露一个
/relay(兼容现有 /v3/relay 协议:{intent, buyIntentSig, transferAuth}),校验后用节点的 operator key 提交到 BuyHelper。
- gas 资金模型:节点用自己的 operator 余额代付,从 sale/协议处结算(或纳入现有 operator 激励)。
- 与现有 BLS 聚合服务的关系:是同一进程加一个路由,还是独立 relay 模块?
- 防滥用:沿用/迁移现有 relayer 的规则引擎 + 限流;多节点下如何防止重复提交(nonce 是 EIP-3009 的
nonce,链上天然防重放,但节点间可加协调/抢单)。
参考
- 当前 relayer 源码:
mycelium/launch → services/relayer(Cloudflare Worker)。
- BuyHelper 合约:
mycelium/launch → contracts/src/BuyHelper.sol。
- SDK 调用方:
@aastar/tokens TokenSaleClient.buyGasless(aastar-sdk,已发 @aastar/sdk@0.26.2);relayer URL 在 @aastar/core LAUNCH_SALE_ADDRESSES[chainId].relayerUrl,DVT 接管后 SDK 只需把这个 URL 指向 DVT relay 端点(或 buyGasless({ relayerUrl }) 覆盖)。
由 SDK 侧(@aastar/sdk)发起,记录免 gas 购买对 relayer 的依赖。是否纳入、如何纳入由 DVT 这边定;需要 relay 协议/载荷的更多细节我可以补。
提案:把"免 gas 购买 relayer"能力纳入 DVT 节点网络
背景
Mycelium launch 代币销售(aPoints/GToken)的免 gas 购买目前依赖一个独立的中心化 relayer——一个 Cloudflare Worker(
mycelium-relayer.jhfnetboy.workers.dev,源码在mycelium/launchrepo 的services/relayer)。SDK 侧(
@aastar/tokens的TokenSaleClient.buyGasless)的流程:TransferWithAuthorization(给 BuyHelper)+ EIP-712BuyIntent(domainMyceliumBuyHelper)。/v3/relay,载荷{ intent, buyIntentSig, transferAuth{v,r,s} }。BuyHelper把 USDC→目标 token 的购买上链,返回txHash。relayer 当前职责(
services/relayer/src):/relay·/v3/relay路由、BuyIntent/EIP-3009 提取与校验(pipeline/extractIntent)、规则引擎(rules/)、限流(rateLimit.ts)、用 operator 私钥签名并提交交易。诉求
把这个 gasless relay 能力纳入 DVT 节点(aNode)网络 —— 让 relay 成为 DVT 基础设施的一项去中心化能力,而不是单点的 Cloudflare Worker。
为什么放 DVT
BuyIntent+ EIP-3009 签名),节点只需校验签名/规则/限流并提交——无状态、易水平扩展。建议范围(供讨论,非强约束)
/relay(兼容现有/v3/relay协议:{intent, buyIntentSig, transferAuth}),校验后用节点的 operator key 提交到BuyHelper。nonce,链上天然防重放,但节点间可加协调/抢单)。参考
mycelium/launch→services/relayer(Cloudflare Worker)。mycelium/launch→contracts/src/BuyHelper.sol。@aastar/tokensTokenSaleClient.buyGasless(aastar-sdk,已发@aastar/sdk@0.26.2);relayer URL 在@aastar/coreLAUNCH_SALE_ADDRESSES[chainId].relayerUrl,DVT 接管后 SDK 只需把这个 URL 指向 DVT relay 端点(或buyGasless({ relayerUrl })覆盖)。