Skip to content

提案:把免 gas 购买 relayer 能力纳入 DVT 节点网络(去中心化 relay) #98

Description

@jhfnetboy

提案:把"免 gas 购买 relayer"能力纳入 DVT 节点网络

背景

Mycelium launch 代币销售(aPoints/GToken)的免 gas 购买目前依赖一个独立的中心化 relayer——一个 Cloudflare Worker(mycelium-relayer.jhfnetboy.workers.dev,源码在 mycelium/launch repo 的 services/relayer)。

SDK 侧(@aastar/tokensTokenSaleClient.buyGasless)的流程:

  1. 用户在浏览器签两个 typed-data:EIP-3009 USDC TransferWithAuthorization(给 BuyHelper)+ EIP-712 BuyIntent(domain MyceliumBuyHelper)。
  2. SDK POST 到 relayer /v3/relay,载荷 { intent, buyIntentSig, transferAuth{v,r,s} }
  3. 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 签名),节点只需校验签名/规则/限流并提交——无状态、易水平扩展。

建议范围(供讨论,非强约束)

  1. DVT 节点暴露一个 /relay(兼容现有 /v3/relay 协议:{intent, buyIntentSig, transferAuth}),校验后用节点的 operator key 提交到 BuyHelper
  2. gas 资金模型:节点用自己的 operator 余额代付,从 sale/协议处结算(或纳入现有 operator 激励)。
  3. 与现有 BLS 聚合服务的关系:是同一进程加一个路由,还是独立 relay 模块?
  4. 防滥用:沿用/迁移现有 relayer 的规则引擎 + 限流;多节点下如何防止重复提交(nonce 是 EIP-3009 的 nonce,链上天然防重放,但节点间可加协调/抢单)。

参考

  • 当前 relayer 源码:mycelium/launchservices/relayer(Cloudflare Worker)。
  • BuyHelper 合约:mycelium/launchcontracts/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 协议/载荷的更多细节我可以补。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions