{
  "type": "viral-sync-fraud-gauntlet",
  "version": "2.0.0",
  "generatedAt": "2026-05-09T11:52:48.830Z",
  "network": "solana-devnet",
  "programId": "AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46",
  "proofStatus": "verified",
  "proofStatusNote": "All 19 structured attackEvidence cases were rejected with expected errors, account mutation checks passed, and counter-attested verifier flags are true.",
  "proofLevel": "counter_attested",
  "attestationModel": "merchant_terminal_visitor_signed",
  "summary": {
    "totalCases": 19,
    "blocked": 19,
    "missing": 0,
    "failed": 0,
    "expectedErrorsMatched": 19,
    "mutationVerified": 19,
    "strictFailureKinds": 19,
    "verifier": {
      "ok": true,
      "terminalVerified": true,
      "visitorVerified": true,
      "lineageVerified": true,
      "nullifierVerified": true,
      "settlementVerified": true
    }
  },
  "cases": [
    {
      "id": "merchant-only-receipt",
      "title": "Merchant-only fake receipt",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "An admin can mark a conversion manually.",
      "viralSyncDefense": "Receipt requires enrolled terminal + visitor signer + merchant authority.",
      "fallbackError": "MissingRequiredSignature",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "MissingRequiredSignature",
      "expectedErrorCode": "MissingRequiredSignature",
      "actualError": "Signature verification failed.\nMissing signature for public key(s) [`8fPxj9YJZQrWnK9jRbR4wUPnrMj5a8Zi3h8doLwCXbei`, `DdrATNwsqENiAnbT4jbCuL3CDYYLJpZasNgTf9HB14sj`].",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Signature verification failed."
    },
    {
      "id": "wrong-terminal-signer",
      "title": "Wrong terminal signer",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "Anyone with staff access can approve a fake code.",
      "viralSyncDefense": "Terminal signer must match the enrolled terminal PDA.",
      "fallbackError": "InvalidTerminalAuthority",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "AccountNotInitialized",
      "expectedErrorCode": "AccountNotInitialized",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0xbc4. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program log: AnchorError caused by account: terminal_device. Error Code: AccountNotInitialized. Error Number: 3012. Error Message: The program expected this account to be already initialized.\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 6929 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0xbc4\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "different-merchant-terminal",
      "title": "Terminal from different merchant",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "A copied terminal or another shop can attest the event.",
      "viralSyncDefense": "Terminal device is bound to the merchant config.",
      "fallbackError": "InvalidTerminalDevice",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "ConstraintSeeds",
      "expectedErrorCode": "ConstraintSeeds",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x7d6. \nLogs: \n[\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError caused by account: terminal_device. Error Code: ConstraintSeeds. Error Number: 2006. Error Message: A seeds constraint was violated.\",\n  \"Program log: Left:\",\n  \"Program log: 47eDtHwQ9QGF1SUWKRTUPygDCmwdeCAj5v7j7MidqQYM\",\n  \"Program log: Right:\",\n  \"Program log: H2gUsF2Bf29j2PUGBEp3jCK5QwAJUtMpen3pk29nzJoy\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 26849 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x7d6\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "terminal-account-signer-mismatch",
      "title": "Correct terminal account, wrong signer",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "A backend can present the right device id but sign with another key.",
      "viralSyncDefense": "The signer must equal terminal_device.terminal_authority.",
      "fallbackError": "InvalidTerminalAuthority",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "ConstraintSeeds",
      "expectedErrorCode": "ConstraintSeeds",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x7d6. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError caused by account: terminal_device. Error Code: ConstraintSeeds. Error Number: 2006. Error Message: A seeds constraint was violated.\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 23324 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x7d6\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "visitor-signer-mismatch",
      "title": "Visitor signer mismatch",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "A staff member can redeem a claim for someone else.",
      "viralSyncDefense": "Visitor signer must match the claim-pass account lineage.",
      "fallbackError": "InvalidVisitorAuthority",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "InvalidClaimPass",
      "expectedErrorCode": "InvalidClaimPass",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x178f. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError caused by account: claim_pass. Error Code: InvalidClaimPass. Error Number: 6031. Error Message: Claim pass is not active or does not match this receipt path..\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 21790 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x178f\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "visitor-beneficiary-mismatch",
      "title": "Visitor beneficiary mismatch",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "Payout can be redirected after the visit.",
      "viralSyncDefense": "Receipt visitor beneficiary must match visitor signer.",
      "fallbackError": "InvalidVisitorAuthority",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "InvalidVisitorAuthority",
      "expectedErrorCode": "InvalidVisitorAuthority",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x178e. \nLogs: \n[\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError thrown in programs\\\\viral_sync\\\\src\\\\instructions\\\\causal_commerce.rs:571. Error Code: InvalidVisitorAuthority. Error Number: 6030. Error Message: Visitor authority must match visitor beneficiary..\",\n  \"Program log: Left:\",\n  \"Program log: DdrATNwsqENiAnbT4jbCuL3CDYYLJpZasNgTf9HB14sj\",\n  \"Program log: Right:\",\n  \"Program log: 3aFeFmwnQhEsoSBnCUeXdM9aJBumbG2kFmsZ1PUaDzep\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 22585 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x178e\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "claim-pass-reused",
      "title": "Claim pass reused",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "Coupon codes are screenshot and reused.",
      "viralSyncDefense": "Claim-pass account is consumed/recorded once.",
      "fallbackError": "ClaimPassAlreadyRecorded",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "InvalidClaimPass",
      "expectedErrorCode": "InvalidClaimPass",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x178f. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError caused by account: claim_pass. Error Code: InvalidClaimPass. Error Number: 6031. Error Message: Claim pass is not active or does not match this receipt path..\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 26305 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x178f\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "claim-pass-campaign-mismatch",
      "title": "Claim pass campaign mismatch",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "A coupon from one campaign is accepted by another.",
      "viralSyncDefense": "Claim pass is bound to campaign PDA.",
      "fallbackError": "InvalidClaimPass",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "InvalidClaimPass",
      "expectedErrorCode": "InvalidClaimPass",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x178f. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError caused by account: claim_pass. Error Code: InvalidClaimPass. Error Number: 6031. Error Message: Claim pass is not active or does not match this receipt path..\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 23272 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x178f\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "claim-pass-depth-exceeds-max-depth",
      "title": "Claim pass depth exceeds max depth",
      "expected": "rejected",
      "instruction": "issue_claim_pass",
      "normalReferralFailure": "Referral trees can grow beyond merchant risk limits.",
      "viralSyncDefense": "Claim depth is capped by campaign.max_depth.",
      "fallbackError": "MaxDepthExceeded",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "MaxDepthExceeded",
      "expectedErrorCode": "MaxDepthExceeded",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x1790. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: IssueClaimPass\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError thrown in programs\\\\viral_sync\\\\src\\\\instructions\\\\causal_commerce.rs:199. Error Code: MaxDepthExceeded. Error Number: 6032. Error Message: Claim pass depth exceeds campaign max depth..\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 15512 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x1790\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "duplicate-nullifier",
      "title": "Duplicate receipt nullifier",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "The same redemption can be replayed.",
      "viralSyncDefense": "Nullifier PDA initialization is exact-once.",
      "fallbackError": "AccountAlreadyInitialized",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "AccountAlreadyInitialized",
      "expectedErrorCode": "AccountAlreadyInitialized",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x0. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Allocate: account Address { address: E3kT3UT9XEKhxLY8p22YLFtiQ3aZJ1USRJPFt8WU5eEB, base: None } already in use\",\n  \"Program 11111111111111111111111111111111 failed: custom program error: 0x0\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 18568 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x0\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "root-parent-lineage-mismatch",
      "title": "Root claim pass with parent lineage",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "A backend can attach fake parent attribution to a root visit.",
      "viralSyncDefense": "Root claim passes must have no parent receipt and a zero parent hash.",
      "fallbackError": "InvalidLineageProof",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "InvalidLineageProof",
      "expectedErrorCode": "InvalidLineageProof",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x1792. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError thrown in programs\\\\viral_sync\\\\src\\\\instructions\\\\causal_commerce.rs:599. Error Code: InvalidLineageProof. Error Number: 6034. Error Message: Claim-pass lineage proof does not match receipt parent data.\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 25424 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x1792\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "child-parent-receipt-hash-mismatch",
      "title": "Child claim pass with forged parent receipt hash",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "A referral tree can point at one parent receipt while committing another parent hash.",
      "viralSyncDefense": "Child claim passes must supply the actual settled parent receipt account and matching parent receipt hash.",
      "fallbackError": "InvalidLineageProof",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "InvalidLineageProof",
      "expectedErrorCode": "InvalidLineageProof",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x1792. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError thrown in programs\\\\viral_sync\\\\src\\\\instructions\\\\causal_commerce.rs:613. Error Code: InvalidLineageProof. Error Number: 6034. Error Message: Claim-pass lineage proof does not match receipt parent data.\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 30072 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x1792\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "inflated-reward-amount",
      "title": "Inflated reward amount",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "Backend bugs can overpay a reward.",
      "viralSyncDefense": "Receipt intent validates reward against manifest cap.",
      "fallbackError": "RewardAmountExceedsManifest",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "RewardAmountExceedsManifest",
      "expectedErrorCode": "RewardAmountExceedsManifest",
      "actualError": "Reward amount exceeds manifest maximum.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "intent_validator_rejection",
      "proofSource": "intent_validator_check",
      "evidence": "Reward amount exceeds manifest maximum."
    },
    {
      "id": "inflated-split-bps",
      "title": "Inflated referrer split bps",
      "expected": "rejected",
      "instruction": "settle_receipt_reward",
      "normalReferralFailure": "A backend can silently change payout split before settlement.",
      "viralSyncDefense": "Settlement terms are locked to the intent/campaign split.",
      "fallbackError": "IntentMismatch",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "IntentMismatch",
      "expectedErrorCode": "IntentMismatch",
      "actualError": "IntentMismatch: referrer split does not match manifest.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "intent_validator_rejection",
      "proofSource": "intent_validator_check",
      "evidence": "IntentMismatch: referrer split does not match manifest."
    },
    {
      "id": "wrong-reward-mint",
      "title": "Wrong reward mint",
      "expected": "rejected",
      "instruction": "fund_growth_bounty",
      "normalReferralFailure": "A fake token can be presented as campaign reward.",
      "viralSyncDefense": "Reward mint must match growth_campaign.reward_mint.",
      "fallbackError": "InvalidRewardMint",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "0x7de",
      "expectedErrorCode": "0x7de",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x7de. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: FundGrowthBounty\",\n  \"Program log: AnchorError caused by account: reward_vault. Error Code: ConstraintTokenMint. Error Number: 2014. Error Message: A token mint constraint was violated.\",\n  \"Program log: Left:\",\n  \"Program log: QCDxFDVZSqCeMq1GcAvxmzZwtbU5jaK3QLZkDwsxsx6\",\n  \"Program log: Right:\",\n  \"Program log: 3uKMctkN5CMr6daTcTpNsJ2uki7DMoYSd3sKQyz6dYZV\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 10286 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x7de\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "wrong-reward-vault",
      "title": "Wrong reward vault",
      "expected": "rejected",
      "instruction": "settle_receipt_reward",
      "normalReferralFailure": "Funds can be routed through a different vault.",
      "viralSyncDefense": "Reward vault is bound to reward escrow PDA.",
      "fallbackError": "ConstraintTokenOwner",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "InvalidState",
      "expectedErrorCode": "InvalidState",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x177e. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: SettleReceiptReward\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError caused by account: reward_vault. Error Code: InvalidState. Error Number: 6014. Error Message: Invalid account state.\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 15852 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x177e\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "settlement-replay",
      "title": "Settlement replay",
      "expected": "rejected",
      "instruction": "settle_receipt_reward",
      "normalReferralFailure": "A settled receipt can be paid again.",
      "viralSyncDefense": "Settlement PDA is initialized once per receipt.",
      "fallbackError": "AccountAlreadyInitialized",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "AccountAlreadyInitialized",
      "expectedErrorCode": "AccountAlreadyInitialized",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x0. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: SettleReceiptReward\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Allocate: account Address { address: 5FUTwyEP1UanmtxJNECfEiieczAKEahH4Tb81JPvyVpy, base: None } already in use\",\n  \"Program 11111111111111111111111111111111 failed: custom program error: 0x0\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 11291 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x0\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "paused-terminal-device",
      "title": "Paused terminal device",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "A disabled counter device can keep accepting customer passes.",
      "viralSyncDefense": "Merchant authority can pause terminal devices and receipt recording rejects inactive terminals.",
      "fallbackError": "TerminalDeviceInactive",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "TerminalDeviceInactive",
      "expectedErrorCode": "TerminalDeviceInactive",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x178b. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError thrown in programs\\\\viral_sync\\\\src\\\\instructions\\\\causal_commerce.rs:572. Error Code: TerminalDeviceInactive. Error Number: 6027. Error Message: Terminal device is not active..\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 23628 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x178b\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    },
    {
      "id": "paused-or-expired-campaign",
      "title": "Paused or expired campaign receipt attempt",
      "expected": "rejected",
      "instruction": "record_causal_receipt",
      "normalReferralFailure": "Old campaigns keep accepting redemptions.",
      "viralSyncDefense": "Campaign status and expiry are checked before receipt recording.",
      "fallbackError": "CampaignInactive",
      "observed": "rejected",
      "status": "blocked",
      "errorCode": "InvalidState",
      "expectedErrorCode": "InvalidState",
      "actualError": "Simulation failed. \nMessage: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x177e. \nLogs: \n[\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 invoke [1]\",\n  \"Program log: Instruction: RecordCausalReceipt\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program 11111111111111111111111111111111 invoke [2]\",\n  \"Program 11111111111111111111111111111111 success\",\n  \"Program log: AnchorError caused by account: growth_campaign. Error Code: InvalidState. Error Number: 6014. Error Message: Invalid account state.\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 consumed 18446 of 200000 compute units\",\n  \"Program AeKT1B58Qi9rBtrtnMe11o4eXbVwHweKxGFNS5X3Vv46 failed: custom program error: 0x177e\"\n]. \nCatch the `SendTransactionError` and call `getLogs()` on it for full details.",
      "expectedErrorMatched": true,
      "accountsMutated": false,
      "accountsMutationVerified": true,
      "failureKind": "program_rejection",
      "proofSource": "devnet_transaction_execution",
      "evidence": "Simulation failed. "
    }
  ],
  "gauntletHash": "ebfcad3e6005f1077cea680a2b0ebbe8514c1d50d60825433353911a69d05170",
  "programSourceHash": "d32e45cff047e254ef928e1978eed5b85b46f4b37ab47fe9b1c4a774fe1d72fe",
  "idlHash": "cbb74d824ce63e9cc5aacd63e5f3d1407ddd011417cd9cbb4f33f76b86e3a6af",
  "proofGeneratorHash": "e69ef8930b15bad61d4dc1ed7b26845912c025cffabbfde2107eea88740a0443",
  "verifierHash": "66a6f12a5d1b98886862580608a131ab2fb32b5a6484b2aa8e0b4962503fe31c",
  "rawVerifierHash": "556d7dc43cf17e0c7d77c00574d0b9b063627ad49e17ed772456a5cf97c5d0e0",
  "publishedVerifierHash": "556d7dc43cf17e0c7d77c00574d0b9b063627ad49e17ed772456a5cf97c5d0e0",
  "stampMode": "final-candidate",
  "artifactHash": "49996374fc455cd13392d7204e4eb427e2630dbf3f33ae76a63f78afa235ad74"
}
