{
  "tool_id": "art-390-tip20-memo-commitment-validator",
  "note": "golden_hash filled by golden-parity.test.mjs --update. Vector 1 matches a raw-payload commitment; vector 2 matches an invoice-locator-template commitment; vector 3 is a mismatch; vector 4 is the empty-input finite-gate edge.",
  "vectors": [
    {
      "name": "payload_commitment_match",
      "description": "memo_hex is the SHA-256 of the supplied payload -- payload_commitment_match true, overall_valid true.",
      "policy_parameters": {
        "memo_hex": "4c39ea457ea3882ae9b4482b045f554f3d032babaa7cc90cecf66d92408aeb8f",
        "payload": "invoice payload synthetic test data"
      },
      "output_payload": {
        "memo_hex": "4c39ea457ea3882ae9b4482b045f554f3d032babaa7cc90cecf66d92408aeb8f",
        "memo_length_valid": true,
        "memo_hex_valid": true,
        "payload_commitment": "4c39ea457ea3882ae9b4482b045f554f3d032babaa7cc90cecf66d92408aeb8f",
        "payload_commitment_match": true,
        "invoice_locator": null,
        "invoice_locator_commitment": null,
        "invoice_locator_match": null,
        "commitment_source_supplied": true,
        "overall_valid": true,
        "note": "Integrity check only -- distinct from screen_tip20_transfer_batch (art-38 AML/Travel Rule screening). Memo is a fixed 32-byte hash-or-locator commitment per docs.tempo.xyz/guide/payments/transfer-memos."
      },
      "golden_hash": "93c026d2b59afb7ddcd665db1801c165c3d55265b16e54e3b7a4435741513ca0"
    },
    {
      "name": "invoice_locator_commitment_match",
      "description": "memo_hex is the SHA-256 of the default invoice locator template (invoice:{invoice_id}) -- invoice_locator_match true.",
      "policy_parameters": {
        "memo_hex": "cefc2a0ab84c2092fc5a5520ea5467644df90315dd169e711363f77c0125f8c5",
        "invoice_id": "INV-2026-000123"
      },
      "output_payload": {
        "memo_hex": "cefc2a0ab84c2092fc5a5520ea5467644df90315dd169e711363f77c0125f8c5",
        "memo_length_valid": true,
        "memo_hex_valid": true,
        "payload_commitment": null,
        "payload_commitment_match": null,
        "invoice_locator": "invoice:INV-2026-000123",
        "invoice_locator_commitment": "cefc2a0ab84c2092fc5a5520ea5467644df90315dd169e711363f77c0125f8c5",
        "invoice_locator_match": true,
        "commitment_source_supplied": true,
        "overall_valid": true,
        "note": "Integrity check only -- distinct from screen_tip20_transfer_batch (art-38 AML/Travel Rule screening). Memo is a fixed 32-byte hash-or-locator commitment per docs.tempo.xyz/guide/payments/transfer-memos."
      },
      "golden_hash": "9d6c42706b7517881d565bd6f8e21f2b573d221f331c3459d81f05d138301c18"
    },
    {
      "name": "payload_commitment_mismatch",
      "description": "memo_hex does not match the SHA-256 of the supplied payload -- overall_valid false, PAYLOAD_COMMITMENT_MISMATCH flag.",
      "policy_parameters": {
        "memo_hex": "0000000000000000000000000000000000000000000000000000000000000000",
        "payload": "wrong payload"
      },
      "output_payload": {
        "memo_hex": "0000000000000000000000000000000000000000000000000000000000000000",
        "memo_length_valid": true,
        "memo_hex_valid": true,
        "payload_commitment": "a505bdea56d5ee1718d4712cadbe2440433bc97b9025dd0bc5dd3faa203b51d3",
        "payload_commitment_match": false,
        "invoice_locator": null,
        "invoice_locator_commitment": null,
        "invoice_locator_match": null,
        "commitment_source_supplied": true,
        "overall_valid": false,
        "note": "Integrity check only -- distinct from screen_tip20_transfer_batch (art-38 AML/Travel Rule screening). Memo is a fixed 32-byte hash-or-locator commitment per docs.tempo.xyz/guide/payments/transfer-memos."
      },
      "golden_hash": "6d12dcdc69a15152bc3f3504ad7dd838fb16f4c036ffe62fdc92078c90444d79"
    },
    {
      "name": "empty_input_finite_gate",
      "description": "Empty policy_parameters -- memo missing/short, no commitment source supplied, overall_valid false, no NaN/Infinity.",
      "policy_parameters": {},
      "output_payload": {
        "memo_hex": null,
        "memo_length_valid": false,
        "memo_hex_valid": false,
        "payload_commitment": null,
        "payload_commitment_match": null,
        "invoice_locator": null,
        "invoice_locator_commitment": null,
        "invoice_locator_match": null,
        "commitment_source_supplied": false,
        "overall_valid": false,
        "note": "Integrity check only -- distinct from screen_tip20_transfer_batch (art-38 AML/Travel Rule screening). Memo is a fixed 32-byte hash-or-locator commitment per docs.tempo.xyz/guide/payments/transfer-memos."
      },
      "golden_hash": "26ac91ed8c9366dce3c242e7c2cfe8d5fe2fa5ddaa43ff5ef54ccd267d0809d8"
    }
  ]
}
