跳转到主要内容

通用结构

interface PaymentPayload {
  x402Version: 1;
  scheme: "exact";
  network: string;
  payload: {
    authorizationType: "eip3009" | "permit" | "permit2";
    signature: `0x${string}`;
    authorization: Record<string, unknown>; // 随类型变化
  };
}

授权类型结构

EIP-3009 (transferWithAuthorization)

interface Eip3009PaymentPayload {
  x402Version: 1;
  scheme: "exact";
  network: string;
  payload: {
    authorizationType: "eip3009";
    signature: `0x${string}`; // EIP-712
    authorization: {
      from: `0x${string}`;
      to: `0x${string}`;
      value: string;        // wei
      validAfter: string;   // unix seconds
      validBefore: string;  // unix seconds
      nonce: `0x${string}`; // 32 bytes
    };
  };
}

EIP-2612 Permit

interface PermitPaymentPayload {
  x402Version: 1;
  scheme: "exact";
  network: string;
  payload: {
    authorizationType: "permit";
    signature: `0x${string}`; // EIP-712
    authorization: {
      owner: `0x${string}`;
      spender: `0x${string}`;
      value: string;      // wei
      deadline: string;   // unix seconds
      nonce: string;      // on-chain nonce
    };
  };
}

Permit2(含 Witness 可选)

interface Permit2PaymentPayload {
  x402Version: 1;
  scheme: "exact";
  network: string;
  payload: {
    authorizationType: "permit2";
    signature: `0x${string}`; // EIP-712
    authorization: {
      owner: `0x${string}`;
      spender: `0x${string}`;
      token: `0x${string}`;
      amount: string;     // wei
      deadline: string;   // unix seconds
      nonce: string;      // uint256
      to?: `0x${string}`; // Witness(接收者绑定)
    };
  };
}

EIP-712 关键字段

  • domain: name/version/chainId/verifyingContract
  • types: 随授权类型而变(TransferWithAuthorization/Permit/Permit2)
  • message: 授权主体(amount/nonce/deadline等)

示例(EIP-3009)

{
  "x402Version": 1,
  "scheme": "exact",
  "network": "bsc",
  "payload": {
    "authorizationType": "eip3009",
    "signature": "0x...",
    "authorization": {
      "from": "0xBuyer",
      "to": "0xSeller",
      "value": "1000000",
      "validAfter": "0",
      "validBefore": "1735689600",
      "nonce": "0x7c7c..."
    }
  }
}

示例(Permit2 with Witness)

{
  "x402Version": 1,
  "scheme": "exact",
  "network": "bsc",
  "payload": {
    "authorizationType": "permit2",
    "signature": "0x...",
    "authorization": {
      "owner": "0xBuyer",
      "spender": "0xSpender",
      "token": "0xUSDC",
      "amount": "1000000",
      "deadline": "1735689600",
      "nonce": "123456789",
      "to": "0xSeller"
    }
  }
}

校验清单(服务端)

  • 版本/方案/网络 与 requirements 一致
  • 授权签名有效,签名者与 owner/from 匹配
  • Token/接收者匹配:token === assetto/spender === payTo
  • 金额与时效:满足 maxAmountRequired 且未过期
  • Nonce/余额:未使用且余额充足(按类型检查)

关键校验

  • 版本/方案/网络 与 requirements 一致
  • 金额 ≥ maxAmountRequired
  • 截止时间未过期
  • spender === payTo(EIP-7702 保障最小信任)

示例(Permit)

{
  "x402Version": 1,
  "scheme": "exact",
  "network": "bsc",
  "payload": {
    "authorizationType": "permit",
    "signature": "0x...",
    "authorization": {
      "owner": "0xBuyer",
      "spender": "0xSeller",
      "value": "1000000",
      "deadline": "1735689600",
      "nonce": "0"
    }
  }
}