在调用最终确认前,锁定路由方的分成。
代理通过 HTTP 402 向工具支付 0.05 USDC。把它引来的路由方获得 10%,在链上预留,工具无法动用。10 分钟退款窗口结束后,任何人都可以释放,而且只能付给路由方。首批用户是代理。这个流程里没有人类。
非托管、开源。资金托管与支付规则由 Solana 主网上的程序执行;中继方在记录前验证每笔付款。
跟随一笔路由分成
commish · usdc- 流量
- 示例:1,000 次付费调用 · 50.00 USDC
- 路由分成 10%
- 5.00 USDC
- 收款方
- 路由方
10
退款窗口
示例演示,并非真实流量:代理通过一个路由方为 1,000 次调用付款。记录它们以预留路由分成。
代理按次付费,路由方靠信任收款。
立即付给路由方,就要为失败买单
调用可能失败、超时或被退款。每次收款都付分成的工具,会为之后退回的调用支付佣金。
先扣着分成,路由方只能信任一张表格
如果工具在确认前扣留分成,路由方既没有应得金额的记录,也无法在工具停付时收款。
机器的速度,人工的流程
代理会发起成千上万笔 5 美分的支付。发票、最低提现额和月结都不适用,也没有人来点批准。
工作原理
付款、记录、锁定、释放
01
付款
代理请求付费接口,收到 402 Payment Required。它向活动金库支付 0.05 USDC,并在备注中写明引流的路由方。
02
记录
中继器在链上读取这笔付款并记录。程序按活动费率算出路由方的 10%,预留在独立账户中。
03
锁定
在 10 分钟窗口内,被退款的调用仍可凭链上退款证明取消。窗口结束后,分成即成为应付款。
04
释放
之后任何人都可以释放。资金只能到达路由方的 USDC 账户,账户租金退还给支付者。
保证
工具方无法违反的规则
程序逐条检查,测试逐条攻击。
应付款保持锁定
提取只能动用金库中未为路由方预留的部分。
一笔付款,一份分成
分成地址来自付款签名的哈希,因此分成未结清时程序会拒绝重复记录。结清关闭后,中继方会检查该地址的链上历史并再次拒绝该付款。
只有 attestor 能记录
每个活动指定一个 attestor 密钥,即中继器。金额由活动费率计算,而非调用者提供。
付款无法改道
释放只付到当前收款方的代币账户,且只用该活动的代币。
窗口后不能取消
退款窗口结束后,分成只能被支付。
不依赖本网站
释放无需许可。即使本站下线,路由方仍能收款。
提前兑现
现在把待付分成卖成 USDC
锁定中的分成是某个日期应付的钱。对于退款窗口较长的工具,路由方可以小幅折价卖给买方,买方现在付款、释放时收款,并承担退款风险。
一笔交易完成:买方付钱给路由方,并成为收款方。其他一切不变。
路由方今天收到
48.75
买方释放时收取
50.00
买方年化收益133.7%
面向工具方
- 通过 HTTP 402 按次向代理收取 USDC
- 为流量付费给路由方:分成由程序托管,而非任何一方
- 每个活动只需设定一次分成和退款窗口
- 付款本身为金库注资:无需预存 USDC
- 随时提取未预留部分
集成
记录一次付费调用
中继器为每笔已验证的付款签署一条指令。订单哈希是活动与付款签名的 SHA-256,因此同一笔付款总是对应同一个分成地址。
// The relayer, after it has read a successful USDC transfer into the vault.import { recordSaleIx, COMMISSION_LEN } from "./commish/program";import { createHash } from "node:crypto";// The order hash is bound to the payment signature; the relayer also refuses a payment whose closed commission was recorded before.const hash = createHash("sha256").update("commish:x402:" + campaign + ":" + paymentSig).digest();const { instruction } = await recordSaleIx({attestor: relayer.address, // the key named by the campaignpayer: relayer.address, // rent for the commission accountcampaign,vault,orderHash: hash,orderAmount: 50_000n, // 0.05 USDC paid by the agent, 6 decimalscreator: router, // from the payment memo commish:<router>lamports: await rpc.getMinimumBalanceForRentExemption(BigInt(COMMISSION_LEN)).send(),});await sendAndConfirm([instruction], [relayer]); // your usual send helper
常见问题
活动金库:由活动地址拥有的 USDC 代币账户。只有程序能转出资金,且只能按上述规则。