{
  "tool_id": "art-590-x402-eip712-digest-recomputer",
  "tool_version": "1.0.0",
  "display_name": "x402 EIP-712 Digest Recomputer",
  "mcp_name": "recompute_x402_eip712_digest",
  "mandate_type": "compliance_control",
  "wave": 99,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-590-x402-eip712-digest-recomputer.html",
  "description": "Recomputes the EIP-712 typed-data digest for an EIP-3009 TransferWithAuthorization struct (the x402 payments rail's underlying authorization primitive) from caller-supplied domain and struct fields only: domain separator, struct hash, and the final keccak256(0x19 || 0x01 || domainSeparator || structHash) digest. All four EIP-712 domain fields (name, version, chainId, verifyingContract) are mandatory inputs and are never defaulted or guessed -- a guessed verifyingContract would defeat the entire point of domain separation. keccak256 comes from the already-vendored, pinned noble-curves/noble-hashes bundle (no new vendoring); the EIP-712/EIP-3009 ABI encoding scheme is implemented directly as public-spec arithmetic on top of it. This node performs no signature recovery and no domain/nonce/window checks -- it makes no claim about signature validity, on-chain settlement, or spend. Zero network calls; never a facilitator, proxy, or settlement relay. Golden vectors are cross-checked against externally published references (the EIP-712 spec's own domain-separator worked example, and Circle's production TransferWithAuthorization typehash), not round-trip self-tests alone.",
  "input_schema_ref": "chaingraph/art-590-x402-eip712-digest-recomputer.html#manifest",
  "consumes": [],
  "feeds": [
    "art-591-x402-signer-recovery-verifier"
  ],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:62dbc12bf0d0a66b089587f7c30ca10fa8ec5e33bed5d8867d9d7dfdba7b0b15",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-08-20"
    }
  ],
  "export_capability": [
    "json"
  ],
  "compute_proof_ready": "ready",
  "deferred_reason": "New shard; awaiting the async GPU proving queue (S18 steady-state).",
  "standards_basis": "not_applicable",
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "K8AJRAXidI7s0vwXXulXoC1rgS4Gi0Q16m68iLVSsH4I7tTWuZwH1S4GyT6WM2RiGgGF/CvRGTz9xLKSJ9Z2zhnWdgHUj+RRGCCG89fx1BoZE1kiRRcHwse8eM4TyFf5Ec2vyJAUjaELdaiEayWpvTTLIsuVL3bhZmgRuXP4VRwcU8+mr2BTDpP6+YWs/6mMWDym4r199fRjMJkcshUMjhDmoIH85VH0PQADUmeLwnzKsLwdE7SJOF0pWZGe6Tv4KrX2cIJbDVZ1zgD61tnobQtniAP4v7fQ2gczTERWVSQQG4IssOxROSCTUn5lidM8ZJqy0bNF30hGlS0vxa07AA==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:62dbc12bf0d0a66b089587f7c30ca10fa8ec5e33bed5d8867d9d7dfdba7b0b15",
      "output": {
        "authorization": {
          "from": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0x0000000000000000000000000000000000000000000000000000000000000001",
          "to": "0xffcf8fdee72ac11b5c542428b35eef5769c409f2",
          "valid_after": "0",
          "valid_before": "2000000000",
          "value": "1000000"
        },
        "digest": "0xb68e5d60d6169bad9739d30399af8f8c7378d464d25f4d971911ab65ef0b014b",
        "domain": {
          "chain_id": "1",
          "name": "USD Coin",
          "verifying_contract": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
          "version": "2"
        },
        "domain_separator": "0x06c37168a7db5138defc7866392bb87a741f9b3d104deb5094588ce041cae335",
        "domain_typehash": "0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
        "reasons": [],
        "scope_note": "Recomputes the EIP-712 digest for an EIP-3009 TransferWithAuthorization struct from caller-supplied domain and authorization fields only. Makes no claim about signature validity, on-chain settlement, or spend -- this node performs no signature recovery and no domain/nonce/window checks (see the sibling x402-signer-recovery-verifier and x402-domain-nonce-window-checker nodes). Zero network calls; every field is caller-supplied and echoed, never independently resolved.",
        "struct_hash": "0x70eb78101a017556e79276183b47e73810ca4c42f2c19345bdf672ca78d23dd0",
        "transfer_with_authorization_typehash": "0x7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267",
        "verdict": "DIGEST_COMPUTED"
      }
    }
  }
}
