B402 通过 Uniswap Permit2 Witness Transfer 支持 permit2-exact 和 permit2-upto。商户 HTTP
402 响应、买方 EIP-712 签名以及 B402 Verify/Settle 请求中的相关值必须保持一致。
地址角色
| 值 | 作用 | 来源 |
|---|---|---|
| 标准 Permit2 合约 | ERC-20 Allowance 目标和 EIP-712 Verifying Contract | 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
extra.spenderAddress | 执行 Permit2 Witness Transfer 的 B402 Proxy | /supported |
extra.signerAddress | 提交结算并代付 Gas 的 Facilitator EOA | /supported |
paymentRequirements.payTo | 商户收款地址 | 商户服务端 |
permit2Authorization.from | 买方/付款人地址及 EIP-712 签名人 | 买方钱包 |
spenderAddress 和 signerAddress 不是同一个地址。将 Facilitator EOA 作为
Permit2 Spender,或 Approve B402 Proxy 而不是标准 Permit2
合约,都会产生无效或无法执行的授权。
通用授权字段
paymentPayload.payload.permit2Authorization 包含:
| 字段 | 含义 |
|---|---|
permitted.token | ERC-20 资产,必须等于 paymentRequirements.asset |
permitted.amount | 精确金额或最大授权金额,使用最小单位 |
from | Token Owner 和签名人 |
spender | /supported 返回的 extra.spenderAddress |
nonce | 未使用的 Permit2 Nonce,十进制字符串 |
deadline | Permit2 授权失效的 Unix Timestamp |
witness.to | 商户地址,必须等于 paymentRequirements.payTo |
witness.validAfter | 允许结算的最早 Unix Timestamp |
signature | 65 字节 EIP-712 签名,0x 开头 Hex |
HTTP 402 中的 paymentRequirements.extra 与 paymentPayload.accepted.extra 必须完整保留
/supported 返回的 name、version、assetTransferMethod、signerAddress 和 spenderAddress。
permit2-exact
使用 scheme: "exact" 和 assetTransferMethod: "permit2-exact"。
permitted.amount等于paymentRequirements.amount。- 不传
settleAmount。 - Witness 类型为
Witness(address to,uint256 validAfter)。 - 不传
witness.facilitator。
买方签署绑定 B402 Exact Proxy 和商户收款地址的 Permit2 Witness Transfer。B402 会精确转移授权金额。
permit2-upto
使用 scheme: "upto" 和 assetTransferMethod: "permit2-upto"。
permitted.amount等于paymentRequirements.amount授权上限。- 商户调用 Settle 时传入
settleAmount。 settleAmount必须大于 0,且不能超过permitted.amount。- Witness 类型为
Witness(address to,address facilitator,uint256 validAfter)。 witness.facilitator等于extra.signerAddress。
Facilitator 地址绑定可防止其他调用方执行 Up-to 授权。买方只签署金额上限,最终金额由商户在 Settle 时确定。
Payload 示例片段
Code
其中 facilitator 仅用于 permit2-upto。
验证清单
调用 Verify 前确认:
- EIP-712 Domain 中的 Chain ID 与
paymentRequirements.network一致。 - EIP-712 Verifying Contract 是标准 Permit2 合约。
spender、witness.to、资产、金额和方式与服务端保存的 Requirements 一致。- Nonce 未使用,且
deadline和validAfter有效。 - 付款人 Token Balance 和 Permit2 Allowance 足够。
permit2-upto的witness.facilitator和settleAmount符合以上规则。
不要直接信任买方提供的 Typed Data 字段,必须与商户服务端保存的 Payment Requirements 比较。