{
  "tool_id": "art-612-erc2612-permit-binding-verifier",
  "tool_version": "1.0.0",
  "display_name": "ERC-2612 Permit Binding Verifier",
  "mcp_name": "verify_erc2612_permit_binding",
  "mandate_type": "compliance_control",
  "wave": 99,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-612-erc2612-permit-binding-verifier.html",
  "description": "Recomputes the EIP-712 typed-data digest for an ERC-2612 Permit struct (the gasless-approval rail used by USDC/DAI-style tokens) from caller-supplied domain and message fields, recovers the ECDSA signer from a caller-supplied signature, and reports whether the recovered signer binds to the caller-claimed owner or names the diverging field. All four EIP-712 domain fields (name, version, chainId, verifyingContract) are mandatory inputs and are never defaulted or guessed -- a guessed verifyingContract would defeat domain separation. keccak256 and secp256k1 recovery come from the already-vendored, pinned noble-curves/noble-hashes bundle shared with the sibling art-590/art-591 x402 pair (no new vendoring); the EIP-712/ERC-2612 ABI encoding scheme is implemented directly as public-spec arithmetic on top of it. This node makes no claim about on-chain nonce freshness, current allowance state, or whether deadline has passed relative to now -- it states plainly what it never fetched. Zero network calls; never a facilitator, proxy, or settlement relay. Golden vectors are cross-checked against an independently re-implemented EIP-712 encoding path and real secp256k1 signatures, not round-trip self-tests alone.",
  "input_schema_ref": "chaingraph/art-612-erc2612-permit-binding-verifier.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [{"system":"sha256-source","image_id":"sha256:a1bb4dd8ffefcc70f0f060116f108f2ff146c650f95ac1ed8d962c838b721ffd","valid_from":"2026-07-10"}],
  "export_capability": [
    "json"
  ],
  "compute_proof_ready": "deferred",
  "deferred_reason": "New shard; awaiting the async GPU proving queue (S18 steady-state).",
  "standards_basis": "not_applicable"
}
