{
  "tool_id": "art-715-token2022-transfer-fee-reconciler",
  "tool_version": "1.0.0",
  "display_name": "Token-2022 Transfer-Fee Payment Reconciler",
  "mcp_name": "reconcile_token2022_transfer_fee",
  "mandate_type": "settlement_mandate",
  "wave": 125,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-715-token2022-transfer-fee-reconciler.html",
  "description": "Recomputes the transfer fee a Token-2022 mint with the transfer-fee extension withholds and the net amount the recipient receives, given the fee schedule, the TransferChecked amount, the execution epoch and the amount a payment verifier credited, then reconciles the credited amount against that net: MATCH, OVER_CREDITED or UNDER_CREDITED with credited_minus_net reported. OVER_CREDITED with the fee as the difference reproduces the Kora GHSA-725g defect class, a facilitator crediting the pre-fee gross amount; the advisory's arithmetic is quoted only as its public text states it. All amounts are decimal strings computed in BigInt with 128-bit intermediates and no floats, porting the pinned Token-2022 clause arithmetic: ceiling(amount times basis points over 10,000) capped at maximum_fee, the newer schedule applying from its epoch on, and the informational minimal pre-fee inverse choosing the smaller amount. The output also records a declared-fee FeeMismatch for TransferCheckedWithFee, an EPOCH_SCHEDULE_DIVERGENCE when the verifier used a different schedule than the execution epoch, and an informational consumer view showing where the x402 SVM gross-amount exact-match path and the balance-delta net path disagree. Exclusions: no wallet addresses, no authorities, no account keys, no signatures, no live data.",
  "input_schema_ref": "chaingraph/art-715-token2022-transfer-fee-reconciler.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [{"system":"sha256-source","image_id":"sha256:020915c5c02c1d2cb9bcb284db4b533d4828472f3b005e2ad70d94c473ab4578","valid_from":"2026-10-12"}],
  "export_capability": [
    "json"
  ],
  "standards_basis": "implements_standard",
  "cited_clause_digest": [
    {
      "digest": "sha256:2f362de2de73ac19d96f2ae8e178ad6dce27dee5599069eff3659e9ad624ef51",
      "source_url": "https://github.com/solana-program/token-2022/blob/5bc7ea3b9568b9fdac2d08c921d73d40260249c7/interface/src/extension/transfer_fee/mod.rs#L25-L128",
      "retrieved_at": "2026-10-01",
      "clause_path": "Lines 25-128: MAX_FEE_BASIS_POINTS, struct TransferFee, ceil_div, calculate_fee, calculate_post_fee_amount, calculate_pre_fee_amount (non-unique inverse, smaller amount chosen), calculate_inverse_fee"
    },
    {
      "digest": "sha256:e3cd2df9cbe6d1d72da9a4a2ff2d64931de7c4d4e5c81e3db968604e69f0f704",
      "source_url": "https://github.com/solana-program/token-2022/blob/5bc7ea3b9568b9fdac2d08c921d73d40260249c7/interface/src/extension/transfer_fee/mod.rs#L130-L194",
      "retrieved_at": "2026-10-01",
      "clause_path": "Lines 130-194: struct TransferFeeConfig layout, get_epoch_fee newer-if-epoch-gte switch, withheld_amount"
    },
    {
      "digest": "sha256:b45a1b6928ae86a6541f90999f7de6704d8ec92dbd38b7e6e4fbbf886e08b3ec",
      "source_url": "https://github.com/solana-program/token-2022/blob/5bc7ea3b9568b9fdac2d08c921d73d40260249c7/program/src/processor.rs#L377-L447",
      "retrieved_at": "2026-10-01",
      "clause_path": "Lines 377-447 (with 540-563): process_transfer fee withholding on TransferChecked/TransferCheckedWithFee, FeeMismatch, MintRequiredForTransfer"
    },
    {
      "digest": "sha256:3c098291f58755a4c36363c30f3002a865e8a112276a542af56d3e65c789574f",
      "source_url": "https://github.com/solana-program/token-2022/blob/5bc7ea3b9568b9fdac2d08c921d73d40260249c7/interface/src/extension/transfer_fee/mod.rs#L196-L470",
      "retrieved_at": "2026-10-01",
      "clause_path": "Lines 196-470: the program transfer-fee test vectors (calculate_fee_min, calculate_fee_max, calculate_fee_zero, test_transfer_fee_config epoch boundary)"
    }
  ],
  "compute_proof_ready": "deferred",
  "deferred_reason": "New gpu:false node, art-715-token2022-transfer-fee-reconciler, built 2026-10-11 (SOLANA-B1-TRANSFER-FEE-NODE-1). No GPU prove has been run and none is proposed by this row — deferred per the section 18 steady-state rule; the section 18 ceiling is raised by one in the same PR (SO #59 in-PR shape) via check-compute-proof-coverage.mjs --update-baseline under a scratch DERIVED_ROOT."
}
