Solana DvP Pre-Funding Terms Verifier

The Solana Foundation DvP program's README requires funders to verify a SwapDvp record before depositing, because CreateDvp is permissionless and a forged record can name attacker destinations. Paste the record you read on-chain, the mint descriptors, the cluster time, and the agreed deal this verifier recomputes the checklist: pinned program owner, exactly 458 bytes, terms match, expiry windows, blocked Token-2022 extensions, and the 32-per-leg hook cap, plus the trusted-authority risks the program accepts as-is. Values only , no RPC, no keys, no on-chain writes. The output is a recompute, not legal finality and not proof of agreement.

Policy Mandate Export settlement_mandate art-735 gpu:false · compute_proof_ready: deferred values-only · zero network
🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data , use synthetic or anonymised inputs only.
Input , pasted record, descriptors and cluster time

Two JSON objects: the record (the SwapDvp field values and mint descriptors you read, plus the owner program id and account byte length) and the expected agreed deal. now must be the cluster unix timestamp in seconds , the system clock is never read.

record JSON , owner_program_id, byte_length, user_a, user_b, mint_a, mint_b, token_program_a, token_program_b, settlement_authority, destination_a, destination_b, mint_a_authority, mint_b_authority, amount_a, amount_b, expiry_timestamp, earliest_settlement_timestamp (null = None), creation_timestamp, nonce, mint_a_extensions, mint_b_extensions, mint_a/b_frozen_by_default, mint_a/b_freeze_authority_set, leg_a_extras_count, leg_b_extras_count, now
expected JSON , amount_a, amount_b, expiry_timestamp, earliest_settlement_timestamp, user_a, user_b, settlement_authority, destination_a, destination_b
How the checks map to the pinned clauses

Owner , README Notes line 33 + the lib.rs declare_id pin: the account must be owned by dvp34bdbcEm4f4FCUjGV4mDAkDshaQR4LkK8fdcsyZq.

Length , the struct pin: SwapDvp::LEN = 1 + 32×7 + 8×4 + 64 + 32×2 + 32×2 + 1 + 8 = 458. A look-alike account of any other length is not a SwapDvp.

Terms , README Notes line 33: amount_a/amount_b, expiry, earliest, user_a, user_b, settlement_authority and both settlement destinations must equal the agreed deal.

Windows , README Notes lines 24/26/27: only Settle rejects after expiry (so expiry must be in the future at your supplied cluster time); earliest must be ≤ expiry; expiry is capped at one year past creation (fixed 365-day year). Budget ~60s of cluster-clock drift.

Blocked extensions , the token_utils pin: TransferFeeConfig, InterestBearingConfig, ScaledUiAmountConfig, NonTransferable each fail with BlockedMintExtension. The recovery paths tolerate them; funding does not.

Hook cap , README Notes line 35 + MAX_HOOK_REMAINING_ACCOUNTS: hook extras are capped at 32 accounts per leg. A mutable hook can raise its list after funding, which is a trusted-authority risk, not a rejection.

Trust flags , README Notes lines 34-35: PermanentDelegate, Pausable, MintCloseAuthority, TransferHook, ConfidentialTransfer and DefaultAccountState / freeze authority are accepted as-is by the program; the verifier surfaces them and never turns them into failures.

Scope and provenance

This verifier recomputes a checklist over pasted values; per README Notes line 31, a record is not proof of agreement, so the output carries no legal finality. Address derivation, escrow balances and recipient-ATA ownership stay with the on-chain checked helpers, the Cantina audit's scope mapping for this commit is unverified and stays out of scope here, and every constant comes from the pinned DvP clause snapshots (per-branch dispositions live in the branch inventory, including the two declared unrepresented branches on PDA seeds and recipient-ATA ownership).

Ask your agent

Copy this paragraph into Claude, OpenClaw, or any MCP-aware agent to run this exact tool, with this sample, and verify the artifact.

Run the AINumbers MCP tool `verify_solana_dvp_terms`. Task: Verify a pasted Solana DvP SwapDvp record against the pre-funding checklist: pinned program owner, 458-byte length, agreed terms match, expiry/earliest windows at a supplied cluster time, blocked Token-2022 extensions, 32-per-leg hook cap; surfaces trusted-authority risks as flags.
Call it with arguments: {"policy_parameters":{"owner_program_id":"dvp34bdbcEm4f4FCUjGV4mDAkDshaQR4LkK8fdcsyZq","byte_length":"458","user_a":"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU","user_b":"Gf8cMJ3yRMLpponGJtdfkzX67BhTReLh4m1uPjYz6Ugk","mint_a":"3p9W2vGhTdMQp7sKdDXhcHmgRcxpaB3ZuXYxU8k2FhQN","mint_b":"8kQFfPJ1FwDkZUsxBernCLzexFAZpQvH4fpRS8TwEGXi","token_program_a":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb","token_program_b":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","settlement_authority":"BfIwS1B8f7RC1ZY8NbZLBuJSQP9fM2tzL8t8XnJ9c8kX","destination_a":"Ck8x2E9S8DcVJ3cJnd6oFfEqBMDdhzWY9zKLzye4LYBw","destination_b":"Dq8pgDk1ZdLcPdMxyvRQ2NLhEu9XvPia8Gn2LtzY9dKo","mint_a_authority":"Eq2vH9GeNcqLQobYm5YoFbLpaKMPTZhMKAqcBf41LxNh","mint_b_authority":"Fq9kxRfM4PqNZeSVh3pLRLn9vbcEKmZAxnZqdZ4SPrBG","amount_a":"1500000000","amount_b":"250000000","expiry_timestamp":"1770086400","earliest_settlement_timestamp":null,"creation_timestamp":"1769900000","nonce":"7284759301947385401","mint_a_extensions":[],"mint_b_extensions":[],"mint_a_frozen_by_default":false,"mint_b_frozen_by_default":false,"mint_a_freeze_authority_set":false,"mint_b_freeze_authority_set":false,"leg_a_extras_count":"0","leg_b_extras_count":"0","now":"1770000000","expected":{"amount_a":"1500000000","amount_b":"250000000","expiry_timestamp":"1770086400","earliest_settlement_timestamp":null,"user_a":"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU","user_b":"Gf8cMJ3yRMLpponGJtdfkzX67BhTReLh4m1uPjYz6Ugk","settlement_authority":"BfIwS1B8f7RC1ZY8NbZLBuJSQP9fM2tzL8t8XnJ9c8kX","destination_a":"Ck8x2E9S8DcVJ3cJnd6oFfEqBMDdhzWY9zKLzye4LYBw","destination_b":"Dq8pgDk1ZdLcPdMxyvRQ2NLhEu9XvPia8Gn2LtzY9dKo"}}}
Verify before trusting: call `verify_execution_hash` on mcp.ainumbers.co (https://mcp.ainumbers.co/mcp) with the parameter `claimed_hash` set to the returned `execution_hash`, passing the full artifact the run returned (the object containing `policy_parameters` + `output_payload` + `execution_hash`; equivalently `policy_parameters` + `output_payload` with `claimed_hash`), not the bare hash string.
Return the ledger link https://ledger.ainumbers.co/ so a human can re-verify without contacting us.
PII rule: All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.
Open the tool with the sample prefilled: https://ainumbers.co/chaingraph/art-735-solana-dvp-prefund-verifier.html#p=v1.H4sIAAAAAAAA_wFkBpv5eyJvd25lcl9wcm9ncmFtX2lkIjoiZHZwMzRiZGJjRW00ZjRGQ1VqR1Y0bURBa0RzaGFRUjRMa0s4ZmRjc3lacSIsImJ5dGVfbGVuZ3RoIjoiNDU4IiwidXNlcl9hIjoiN3hLWHRnMkNXODdkOTdUWEpTRHBiRDVqQmtoZVRxQTgzVFpSdUpvc2dBc1UiLCJ1c2VyX2IiOiJHZjhjTUozeVJNTHBwb25HSnRkZmt6WDY3QmhUUmVMaDRtMXVQall6NlVnayIsIm1pbnRfYSI6IjNwOVcydkdoVGRNUXA3c0tkRFhoY0htZ1JjeHBhQjNadVhZeFU4azJGaFFOIiwibWludF9iIjoiOGtRRmZQSjFGd0RrWlVzeEJlcm5DTHpleEZBWnBRdkg0ZnBSUzhUd0VHWGkiLCJ0b2tlbl9wcm9ncmFtX2EiOiJUb2tlbnpRZEJOYkxxUDVWRWhka0FTNkVQRkxDMVBIbkJxQ1hFcFB4dUViIiwidG9rZW5fcHJvZ3JhbV9iIjoiVG9rZW5rZWdRZmVaeWlOd0FKYk5iR0tQRlhDV3VCdmY5U3M2MjNWUTVEQSIsInNldHRsZW1lbnRfYXV0aG9yaXR5IjoiQmZJd1MxQjhmN1JDMVpZOE5iWkxCdUpTUVA5Zk0ydHpMOHQ4WG5KOWM4a1giLCJkZXN0aW5hdGlvbl9hIjoiQ2s4eDJFOVM4RGNWSjNjSm5kNm9GZkVxQk1EZGh6V1k5ektMenllNExZQnciLCJkZXN0aW5hdGlvbl9iIjoiRHE4cGdEazFaZExjUGRNeHl2UlEyTkxoRXU5WHZQaWE4R24yTHR6WTlkS28iLCJtaW50X2FfYXV0aG9yaXR5IjoiRXEydkg5R2VOY3FMUW9iWW01WW9GYkxwYUtNUFRaaE1LQXFjQmY0MUx4TmgiLCJtaW50X2JfYXV0aG9yaXR5IjoiRnE5a3hSZk00UHFOWmVTVmgzcExSTG45dmJjRUttWkF4blpxZFo0U1ByQkciLCJhbW91bnRfYSI6IjE1MDAwMDAwMDAiLCJhbW91bnRfYiI6IjI1MDAwMDAwMCIsImV4cGlyeV90aW1lc3RhbXAiOiIxNzcwMDg2NDAwIiwiZWFybGllc3Rfc2V0dGxlbWVudF90aW1lc3RhbXAiOm51bGwsImNyZWF0aW9uX3RpbWVzdGFtcCI6IjE3Njk5MDAwMDAiLCJub25jZSI6IjcyODQ3NTkzMDE5NDczODU0MDEiLCJtaW50X2FfZXh0ZW5zaW9ucyI6W10sIm1pbnRfYl9leHRlbnNpb25zIjpbXSwibWludF9hX2Zyb3plbl9ieV9kZWZhdWx0IjpmYWxzZSwibWludF9iX2Zyb3plbl9ieV9kZWZhdWx0IjpmYWxzZSwibWludF9hX2ZyZWV6ZV9hdXRob3JpdHlfc2V0IjpmYWxzZSwibWludF9iX2ZyZWV6ZV9hdXRob3JpdHlfc2V0IjpmYWxzZSwibGVnX2FfZXh0cmFzX2NvdW50IjoiMCIsImxlZ19iX2V4dHJhc19jb3VudCI6IjAiLCJub3ciOiIxNzcwMDAwMDAwIiwiZXhwZWN0ZWQiOnsiYW1vdW50X2EiOiIxNTAwMDAwMDAwIiwiYW1vdW50X2IiOiIyNTAwMDAwMDAiLCJleHBpcnlfdGltZXN0YW1wIjoiMTc3MDA4NjQwMCIsImVhcmxpZXN0X3NldHRsZW1lbnRfdGltZXN0YW1wIjpudWxsLCJ1c2VyX2EiOiI3eEtYdGcyQ1c4N2Q5N1RYSlNEcGJENWpCa2hlVHFBODNUWlJ1Sm9zZ0FzVSIsInVzZXJfYiI6IkdmOGNNSjN5Uk1McHBvbkdKdGRma3pYNjdCaFRSZUxoNG0xdVBqWXo2VWdrIiwic2V0dGxlbWVudF9hdXRob3JpdHkiOiJCZkl3UzFCOGY3UkMxWlk4TmJaTEJ1SlNRUDlmTTJ0ekw4dDhYbko5YzhrWCIsImRlc3RpbmF0aW9uX2EiOiJDazh4MkU5UzhEY1ZKM2NKbmQ2b0ZmRXFCTURkaHpXWTl6S0x6eWU0TFlCdyIsImRlc3RpbmF0aW9uX2IiOiJEcThwZ0RrMVpkTGNQZE14eXZSUTJOTGhFdTlYdlBpYThHbjJMdHpZOWRLbyJ9feQSOrlkBgAA