{
  "tool_id": "art-613-erc4337-userop-math",
  "note": "golden_hash filled by `node golden-parity.test.mjs --update`. Every user_op_hash and packed_user_op_hash below is cross-checked against an INDEPENDENT re-implementation of Keccak-256 and of the ERC-4337 ABI packing, written from the Keccak spec with BigInt 64-bit lane arithmetic (a different code path from the vendored noble sha3 the kernel uses) and with a hex-string ABI encoder (a different code path from the kernel's Uint8Array word assembly). That oracle is itself anchored on two externally published constants it must reproduce before it is trusted: Keccak-256(\"\") = c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 and Keccak-256(\"abc\") = 4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45. The oracle also runs a negative control: the v0.6 and v0.7 layouts must produce DIFFERENT hashes for identical field values, so agreement is not an artifact of a layout-insensitive encoder. The EntryPoint addresses in the v0.6 and v0.7 vectors are the widely published canonical deployment addresses for each version (0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 and 0x0000000071727De22E5E9d8BAf0edAc6f37da032); they are DECLARED caller inputs here, and the kernel only flags whether a declared address matches the canonical one, never substituting it. Struct layouts and the prefund formulas follow the ERC-4337 v0.6 and v0.7 EntryPoint/UserOperationLib specifications. ⛔ No vector asserts an on-chain outcome: these are recompute and reconcile vectors only.",
  "vectors": [
    {
      "name": "v06-canonical-entrypoint-no-paymaster",
      "note": "v0.6 UserOperation, 10-word pack, canonical EntryPoint v0.6 deployment address, no paymaster so the prefund multiplier is 1.",
      "policy_parameters": {
        "entryPointVersion": "0.6",
        "entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000
      },
      "output_payload": {
        "verdict": "USEROP_RECOMPUTED",
        "reasons": [],
        "entry_point": {
          "declared_version": "0.6",
          "address": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "canonical_address_for_declared_version": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "address_matches_canonical": true
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": {
          "layout": "v0.6 UserOperation -- abi.encode(address sender, uint256 nonce, bytes32 keccak(initCode), bytes32 keccak(callData), uint256 callGasLimit, uint256 verificationGasLimit, uint256 preVerificationGas, uint256 maxFeePerGas, uint256 maxPriorityFeePerGas, bytes32 keccak(paymasterAndData))",
          "word_count": 10,
          "account_gas_limits": null,
          "gas_fees": null
        },
        "field_hashes": {
          "init_code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "call_data_hash": "0x8f54361c53196a7fbccb94b6951e30560cd56ed2372519e43070080b38f6f453",
          "paymaster_and_data_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
        },
        "packed_user_op_hash": "0x5e08d083a1feb79bd51258315a754492fe4c2940aef0915261e4e03cf225830c",
        "user_op_hash": "0x539c1b3b19f9bf3007fcede2a7b52ce1fc02d03b18673046e80a0c902d2ca1b2",
        "gas_accounting": {
          "entry_point_version": "0.6",
          "required_gas": "271000",
          "required_prefund_wei": "542000000000000",
          "prefund_formula": "v0.6: (callGasLimit + verificationGasLimit * paymasterMultiplier + preVerificationGas) * maxFeePerGas",
          "paymaster_present": false,
          "paymaster_address": null,
          "paymaster_multiplier_applied": "1",
          "paymaster_verification_gas_limit": null,
          "paymaster_post_op_gas_limit": null,
          "paymaster_fields_note": null,
          "declared_base_fee_per_gas": null,
          "effective_gas_price_wei": null,
          "effective_gas_price_basis": "requires_declared_base_fee -- the fee caps differ, so the price depends on block.basefee, which this kernel never fetches. Supply declaredBaseFeePerGas."
        },
        "paymaster_reconciliation": {
          "status": "NOT_ATTEMPTED",
          "missing_declared_inputs": [
            "declaredActualGasUsed",
            "declaredActualGasCostWei",
            "an effective gas price (supply declaredBaseFeePerGas)"
          ],
          "declared_actual_gas_used": null,
          "declared_actual_gas_cost_wei": null,
          "declared_l1_data_fee_wei": null,
          "recomputed_execution_cost_wei": null,
          "recomputed_total_charge_wei": null,
          "residual_wei": null,
          "tolerance_wei": "0",
          "notes": [
            "Reconciliation was not attempted because the inputs above were not declared. This kernel never substitutes a fetched or assumed value for a missing declared one."
          ]
        },
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "5a74a2c1583b86b0330bfd1f873445db1ef0bab9c4196d740f0ca757d249b2a3"
    },
    {
      "name": "v06-canonical-entrypoint-with-paymaster-multiplier-3",
      "note": "v0.6 with a paymaster present: verificationGasLimit is multiplied by 3 in the prefund formula because the same limit also caps postOp, which may be called twice.",
      "policy_parameters": {
        "entryPointVersion": "0.6",
        "entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000
      },
      "output_payload": {
        "verdict": "USEROP_RECOMPUTED",
        "reasons": [],
        "entry_point": {
          "declared_version": "0.6",
          "address": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "canonical_address_for_declared_version": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "address_matches_canonical": true
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": {
          "layout": "v0.6 UserOperation -- abi.encode(address sender, uint256 nonce, bytes32 keccak(initCode), bytes32 keccak(callData), uint256 callGasLimit, uint256 verificationGasLimit, uint256 preVerificationGas, uint256 maxFeePerGas, uint256 maxPriorityFeePerGas, bytes32 keccak(paymasterAndData))",
          "word_count": 10,
          "account_gas_limits": null,
          "gas_fees": null
        },
        "field_hashes": {
          "init_code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "call_data_hash": "0x8f54361c53196a7fbccb94b6951e30560cd56ed2372519e43070080b38f6f453",
          "paymaster_and_data_hash": "0x36d2122e1bfd3419690d0aeaf5131561065b8fe2c4eb07bad7c36e924076362d"
        },
        "packed_user_op_hash": "0x25d4eeb27d24d9b4899bb7a22ea8dddeca31d86ce7c8e916b63623dedc0329f1",
        "user_op_hash": "0x45ab83d646f4aaad28e0d2987bcdacd64d6b2ead0b56520d1d1119f2d942671b",
        "gas_accounting": {
          "entry_point_version": "0.6",
          "required_gas": "571000",
          "required_prefund_wei": "1142000000000000",
          "prefund_formula": "v0.6: (callGasLimit + verificationGasLimit * paymasterMultiplier + preVerificationGas) * maxFeePerGas",
          "paymaster_present": true,
          "paymaster_address": "0x1234567890abcdef1234567890abcdef12345678",
          "paymaster_multiplier_applied": "3",
          "paymaster_verification_gas_limit": null,
          "paymaster_post_op_gas_limit": null,
          "paymaster_fields_note": null,
          "declared_base_fee_per_gas": null,
          "effective_gas_price_wei": null,
          "effective_gas_price_basis": "requires_declared_base_fee -- the fee caps differ, so the price depends on block.basefee, which this kernel never fetches. Supply declaredBaseFeePerGas."
        },
        "paymaster_reconciliation": {
          "status": "NOT_ATTEMPTED",
          "missing_declared_inputs": [
            "declaredActualGasUsed",
            "declaredActualGasCostWei",
            "an effective gas price (supply declaredBaseFeePerGas)"
          ],
          "declared_actual_gas_used": null,
          "declared_actual_gas_cost_wei": null,
          "declared_l1_data_fee_wei": null,
          "recomputed_execution_cost_wei": null,
          "recomputed_total_charge_wei": null,
          "residual_wei": null,
          "tolerance_wei": "0",
          "notes": [
            "Reconciliation was not attempted because the inputs above were not declared. This kernel never substitutes a fetched or assumed value for a missing declared one."
          ]
        },
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "72635ef28bf719d8797293db31c193e4bd97ddacfd1fe7a09e6b932f03892504"
    },
    {
      "name": "v07-canonical-entrypoint-with-paymaster",
      "note": "v0.7 PackedUserOperation, 8-word pack with accountGasLimits and gasFees, canonical EntryPoint v0.7 deployment address; the paymaster gas limits are parsed from the 52-byte paymasterAndData header and summed into the prefund.",
      "policy_parameters": {
        "entryPointVersion": "0.7",
        "entryPoint": "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000
      },
      "output_payload": {
        "verdict": "USEROP_RECOMPUTED",
        "reasons": [],
        "entry_point": {
          "declared_version": "0.7",
          "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "canonical_address_for_declared_version": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "address_matches_canonical": true
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": {
          "layout": "v0.7 PackedUserOperation -- abi.encode(address sender, uint256 nonce, bytes32 keccak(initCode), bytes32 keccak(callData), bytes32 accountGasLimits, uint256 preVerificationGas, bytes32 gasFees, bytes32 keccak(paymasterAndData))",
          "word_count": 8,
          "account_gas_limits": "0x000000000000000000000000000249f0000000000000000000000000000186a0",
          "gas_fees": "0x0000000000000000000000003b9aca0000000000000000000000000077359400"
        },
        "field_hashes": {
          "init_code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "call_data_hash": "0x8f54361c53196a7fbccb94b6951e30560cd56ed2372519e43070080b38f6f453",
          "paymaster_and_data_hash": "0x36d2122e1bfd3419690d0aeaf5131561065b8fe2c4eb07bad7c36e924076362d"
        },
        "packed_user_op_hash": "0x52e679e739b9f5b66538936b2f3be06cf0bca1ea718d916565a0259c0b12d9d7",
        "user_op_hash": "0x7fd545713c201756c30339c7aa358849b04a3b37ac279fcf33bb09fff4550405",
        "gas_accounting": {
          "entry_point_version": "0.7",
          "required_gas": "401000",
          "required_prefund_wei": "802000000000000",
          "prefund_formula": "v0.7: (verificationGasLimit + callGasLimit + preVerificationGas + paymasterVerificationGasLimit + paymasterPostOpGasLimit) * maxFeePerGas",
          "paymaster_present": true,
          "paymaster_address": "0x1234567890abcdef1234567890abcdef12345678",
          "paymaster_multiplier_applied": null,
          "paymaster_verification_gas_limit": "80000",
          "paymaster_post_op_gas_limit": "50000",
          "paymaster_fields_note": null,
          "declared_base_fee_per_gas": null,
          "effective_gas_price_wei": null,
          "effective_gas_price_basis": "requires_declared_base_fee -- the fee caps differ, so the price depends on block.basefee, which this kernel never fetches. Supply declaredBaseFeePerGas."
        },
        "paymaster_reconciliation": {
          "status": "NOT_ATTEMPTED",
          "missing_declared_inputs": [
            "declaredActualGasUsed",
            "declaredActualGasCostWei",
            "an effective gas price (supply declaredBaseFeePerGas)"
          ],
          "declared_actual_gas_used": null,
          "declared_actual_gas_cost_wei": null,
          "declared_l1_data_fee_wei": null,
          "recomputed_execution_cost_wei": null,
          "recomputed_total_charge_wei": null,
          "residual_wei": null,
          "tolerance_wei": "0",
          "notes": [
            "Reconciliation was not attempted because the inputs above were not declared. This kernel never substitutes a fetched or assumed value for a missing declared one."
          ]
        },
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "e3f8e5edeb846f044e3d114227adda93ddecd24f26dd8d341e0b5d79791b7a45"
    },
    {
      "name": "v07-base8453-legacy-equal-fee-caps",
      "note": "v0.7 on a different declared chainId with maxFeePerGas equal to maxPriorityFeePerGas, which is the EntryPoint legacy shortcut: the effective gas price is derivable offline with no declared basefee.",
      "policy_parameters": {
        "entryPointVersion": "0.7",
        "entryPoint": "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
        "chainId": 8453,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 1500000000,
        "maxPriorityFeePerGas": 1500000000
      },
      "output_payload": {
        "verdict": "USEROP_RECOMPUTED",
        "reasons": [],
        "entry_point": {
          "declared_version": "0.7",
          "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "canonical_address_for_declared_version": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "address_matches_canonical": true
        },
        "chain_id": "8453",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "1500000000",
          "max_priority_fee_per_gas": "1500000000"
        },
        "packed_words": {
          "layout": "v0.7 PackedUserOperation -- abi.encode(address sender, uint256 nonce, bytes32 keccak(initCode), bytes32 keccak(callData), bytes32 accountGasLimits, uint256 preVerificationGas, bytes32 gasFees, bytes32 keccak(paymasterAndData))",
          "word_count": 8,
          "account_gas_limits": "0x000000000000000000000000000249f0000000000000000000000000000186a0",
          "gas_fees": "0x00000000000000000000000059682f0000000000000000000000000059682f00"
        },
        "field_hashes": {
          "init_code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "call_data_hash": "0x8f54361c53196a7fbccb94b6951e30560cd56ed2372519e43070080b38f6f453",
          "paymaster_and_data_hash": "0x36d2122e1bfd3419690d0aeaf5131561065b8fe2c4eb07bad7c36e924076362d"
        },
        "packed_user_op_hash": "0x3b0a6b74c8522af06495f0d37e422237f60341251cf95c32e4b4d6add682e2ad",
        "user_op_hash": "0xf5c7bcc3a819a1b8110c2e976c348ece413774ce965f63e3e151ce2d2c5b7cc4",
        "gas_accounting": {
          "entry_point_version": "0.7",
          "required_gas": "401000",
          "required_prefund_wei": "601500000000000",
          "prefund_formula": "v0.7: (verificationGasLimit + callGasLimit + preVerificationGas + paymasterVerificationGasLimit + paymasterPostOpGasLimit) * maxFeePerGas",
          "paymaster_present": true,
          "paymaster_address": "0x1234567890abcdef1234567890abcdef12345678",
          "paymaster_multiplier_applied": null,
          "paymaster_verification_gas_limit": "80000",
          "paymaster_post_op_gas_limit": "50000",
          "paymaster_fields_note": null,
          "declared_base_fee_per_gas": null,
          "effective_gas_price_wei": "1500000000",
          "effective_gas_price_basis": "legacy_equal_fee_caps -- maxFeePerGas equals maxPriorityFeePerGas, so the EntryPoint returns maxFeePerGas directly and no basefee is involved"
        },
        "paymaster_reconciliation": {
          "status": "NOT_ATTEMPTED",
          "missing_declared_inputs": [
            "declaredActualGasUsed",
            "declaredActualGasCostWei"
          ],
          "declared_actual_gas_used": null,
          "declared_actual_gas_cost_wei": null,
          "declared_l1_data_fee_wei": null,
          "recomputed_execution_cost_wei": null,
          "recomputed_total_charge_wei": null,
          "residual_wei": null,
          "tolerance_wei": "0",
          "notes": [
            "Reconciliation was not attempted because the inputs above were not declared. This kernel never substitutes a fetched or assumed value for a missing declared one."
          ]
        },
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "f29587dc04b6676ae85af4c4a53f5539556d75e59c74c7ff0b8fa4c6a15875eb"
    },
    {
      "name": "reconciliation-positive-exact",
      "note": "RECONCILED: declaredActualGasCostWei equals declaredActualGasUsed times the effective gas price derived from the declared basefee, plus the declared L1 data fee. Residual is zero.",
      "policy_parameters": {
        "entryPointVersion": "0.7",
        "entryPoint": "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000,
        "declaredBaseFeePerGas": 500000000,
        "declaredActualGasUsed": 180000,
        "declaredActualGasCostWei": "271000000000000",
        "declaredL1DataFeeWei": "1000000000000"
      },
      "output_payload": {
        "verdict": "USEROP_RECOMPUTED",
        "reasons": [],
        "entry_point": {
          "declared_version": "0.7",
          "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "canonical_address_for_declared_version": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "address_matches_canonical": true
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": {
          "layout": "v0.7 PackedUserOperation -- abi.encode(address sender, uint256 nonce, bytes32 keccak(initCode), bytes32 keccak(callData), bytes32 accountGasLimits, uint256 preVerificationGas, bytes32 gasFees, bytes32 keccak(paymasterAndData))",
          "word_count": 8,
          "account_gas_limits": "0x000000000000000000000000000249f0000000000000000000000000000186a0",
          "gas_fees": "0x0000000000000000000000003b9aca0000000000000000000000000077359400"
        },
        "field_hashes": {
          "init_code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "call_data_hash": "0x8f54361c53196a7fbccb94b6951e30560cd56ed2372519e43070080b38f6f453",
          "paymaster_and_data_hash": "0x36d2122e1bfd3419690d0aeaf5131561065b8fe2c4eb07bad7c36e924076362d"
        },
        "packed_user_op_hash": "0x52e679e739b9f5b66538936b2f3be06cf0bca1ea718d916565a0259c0b12d9d7",
        "user_op_hash": "0x7fd545713c201756c30339c7aa358849b04a3b37ac279fcf33bb09fff4550405",
        "gas_accounting": {
          "entry_point_version": "0.7",
          "required_gas": "401000",
          "required_prefund_wei": "802000000000000",
          "prefund_formula": "v0.7: (verificationGasLimit + callGasLimit + preVerificationGas + paymasterVerificationGasLimit + paymasterPostOpGasLimit) * maxFeePerGas",
          "paymaster_present": true,
          "paymaster_address": "0x1234567890abcdef1234567890abcdef12345678",
          "paymaster_multiplier_applied": null,
          "paymaster_verification_gas_limit": "80000",
          "paymaster_post_op_gas_limit": "50000",
          "paymaster_fields_note": null,
          "declared_base_fee_per_gas": "500000000",
          "effective_gas_price_wei": "1500000000",
          "effective_gas_price_basis": "declared_base_fee -- min(maxFeePerGas, maxPriorityFeePerGas + declaredBaseFeePerGas), using the CALLER-DECLARED basefee, never a fetched one"
        },
        "paymaster_reconciliation": {
          "status": "RECONCILED",
          "missing_declared_inputs": [],
          "declared_actual_gas_used": "180000",
          "declared_actual_gas_cost_wei": "271000000000000",
          "declared_l1_data_fee_wei": "1000000000000",
          "recomputed_execution_cost_wei": "270000000000000",
          "recomputed_total_charge_wei": "271000000000000",
          "residual_wei": "0",
          "tolerance_wei": "0",
          "notes": []
        },
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "02b77b316c92c922333133413dc2e417e14c0c5190e69f58b49bd2341516b91c"
    },
    {
      "name": "reconciliation-negative-residual-undeclared-l1-fee",
      "note": "RESIDUAL_UNEXPLAINED: the same charge with no declaredL1DataFeeWei. The kernel reports the residual and names the undeclared L1 data fee as a consistent cause without asserting it, because it never derives that value.",
      "policy_parameters": {
        "entryPointVersion": "0.7",
        "entryPoint": "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000,
        "declaredBaseFeePerGas": 500000000,
        "declaredActualGasUsed": 180000,
        "declaredActualGasCostWei": "271000000000000"
      },
      "output_payload": {
        "verdict": "USEROP_RECOMPUTED",
        "reasons": [],
        "entry_point": {
          "declared_version": "0.7",
          "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "canonical_address_for_declared_version": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "address_matches_canonical": true
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": {
          "layout": "v0.7 PackedUserOperation -- abi.encode(address sender, uint256 nonce, bytes32 keccak(initCode), bytes32 keccak(callData), bytes32 accountGasLimits, uint256 preVerificationGas, bytes32 gasFees, bytes32 keccak(paymasterAndData))",
          "word_count": 8,
          "account_gas_limits": "0x000000000000000000000000000249f0000000000000000000000000000186a0",
          "gas_fees": "0x0000000000000000000000003b9aca0000000000000000000000000077359400"
        },
        "field_hashes": {
          "init_code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "call_data_hash": "0x8f54361c53196a7fbccb94b6951e30560cd56ed2372519e43070080b38f6f453",
          "paymaster_and_data_hash": "0x36d2122e1bfd3419690d0aeaf5131561065b8fe2c4eb07bad7c36e924076362d"
        },
        "packed_user_op_hash": "0x52e679e739b9f5b66538936b2f3be06cf0bca1ea718d916565a0259c0b12d9d7",
        "user_op_hash": "0x7fd545713c201756c30339c7aa358849b04a3b37ac279fcf33bb09fff4550405",
        "gas_accounting": {
          "entry_point_version": "0.7",
          "required_gas": "401000",
          "required_prefund_wei": "802000000000000",
          "prefund_formula": "v0.7: (verificationGasLimit + callGasLimit + preVerificationGas + paymasterVerificationGasLimit + paymasterPostOpGasLimit) * maxFeePerGas",
          "paymaster_present": true,
          "paymaster_address": "0x1234567890abcdef1234567890abcdef12345678",
          "paymaster_multiplier_applied": null,
          "paymaster_verification_gas_limit": "80000",
          "paymaster_post_op_gas_limit": "50000",
          "paymaster_fields_note": null,
          "declared_base_fee_per_gas": "500000000",
          "effective_gas_price_wei": "1500000000",
          "effective_gas_price_basis": "declared_base_fee -- min(maxFeePerGas, maxPriorityFeePerGas + declaredBaseFeePerGas), using the CALLER-DECLARED basefee, never a fetched one"
        },
        "paymaster_reconciliation": {
          "status": "RESIDUAL_UNEXPLAINED",
          "missing_declared_inputs": [],
          "declared_actual_gas_used": "180000",
          "declared_actual_gas_cost_wei": "271000000000000",
          "declared_l1_data_fee_wei": null,
          "recomputed_execution_cost_wei": "270000000000000",
          "recomputed_total_charge_wei": "270000000000000",
          "residual_wei": "1000000000000",
          "tolerance_wei": "0",
          "notes": [
            "No declaredL1DataFeeWei was supplied, so the recomputed total covers execution gas only. On rollups the charge commonly also includes an L1 data fee, which this kernel NEVER derives -- post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee. A positive residual is consistent with an undeclared L1 data fee, and this kernel does not assert which.",
            "The declared charge and the charge recomputed from declared inputs differ by more than the declared tolerance. This is a reported difference, not a finding of error: an undeclared fee component, a different effective gas price at inclusion time, or a postOp refund would each produce it."
          ]
        },
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "9135a52c811f6e9fb4bb44a88738fcef9103bd5e6f74af92d11a0cf964bc19f4"
    },
    {
      "name": "reconciliation-not-attempted-no-declared-basefee",
      "note": "NOT_ATTEMPTED: fee caps differ and no declaredBaseFeePerGas was supplied, so there is no effective gas price to reconcile against. The kernel names the missing input rather than assuming a basefee.",
      "policy_parameters": {
        "entryPointVersion": "0.7",
        "entryPoint": "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000,
        "declaredActualGasUsed": 180000,
        "declaredActualGasCostWei": "271000000000000"
      },
      "output_payload": {
        "verdict": "USEROP_RECOMPUTED",
        "reasons": [],
        "entry_point": {
          "declared_version": "0.7",
          "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "canonical_address_for_declared_version": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "address_matches_canonical": true
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x1234567890abcdef1234567890abcdef12345678000000000000000000000000000138800000000000000000000000000000c350deadbeef",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": {
          "layout": "v0.7 PackedUserOperation -- abi.encode(address sender, uint256 nonce, bytes32 keccak(initCode), bytes32 keccak(callData), bytes32 accountGasLimits, uint256 preVerificationGas, bytes32 gasFees, bytes32 keccak(paymasterAndData))",
          "word_count": 8,
          "account_gas_limits": "0x000000000000000000000000000249f0000000000000000000000000000186a0",
          "gas_fees": "0x0000000000000000000000003b9aca0000000000000000000000000077359400"
        },
        "field_hashes": {
          "init_code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "call_data_hash": "0x8f54361c53196a7fbccb94b6951e30560cd56ed2372519e43070080b38f6f453",
          "paymaster_and_data_hash": "0x36d2122e1bfd3419690d0aeaf5131561065b8fe2c4eb07bad7c36e924076362d"
        },
        "packed_user_op_hash": "0x52e679e739b9f5b66538936b2f3be06cf0bca1ea718d916565a0259c0b12d9d7",
        "user_op_hash": "0x7fd545713c201756c30339c7aa358849b04a3b37ac279fcf33bb09fff4550405",
        "gas_accounting": {
          "entry_point_version": "0.7",
          "required_gas": "401000",
          "required_prefund_wei": "802000000000000",
          "prefund_formula": "v0.7: (verificationGasLimit + callGasLimit + preVerificationGas + paymasterVerificationGasLimit + paymasterPostOpGasLimit) * maxFeePerGas",
          "paymaster_present": true,
          "paymaster_address": "0x1234567890abcdef1234567890abcdef12345678",
          "paymaster_multiplier_applied": null,
          "paymaster_verification_gas_limit": "80000",
          "paymaster_post_op_gas_limit": "50000",
          "paymaster_fields_note": null,
          "declared_base_fee_per_gas": null,
          "effective_gas_price_wei": null,
          "effective_gas_price_basis": "requires_declared_base_fee -- the fee caps differ, so the price depends on block.basefee, which this kernel never fetches. Supply declaredBaseFeePerGas."
        },
        "paymaster_reconciliation": {
          "status": "NOT_ATTEMPTED",
          "missing_declared_inputs": [
            "an effective gas price (supply declaredBaseFeePerGas)"
          ],
          "declared_actual_gas_used": "180000",
          "declared_actual_gas_cost_wei": "271000000000000",
          "declared_l1_data_fee_wei": null,
          "recomputed_execution_cost_wei": null,
          "recomputed_total_charge_wei": null,
          "residual_wei": null,
          "tolerance_wei": "0",
          "notes": [
            "Reconciliation was not attempted because the inputs above were not declared. This kernel never substitutes a fetched or assumed value for a missing declared one."
          ]
        },
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "388e86749cea721228db078b1b0018d4485c3a85bc3fade86f5dc2b71d28b7b2"
    },
    {
      "name": "v07-short-paymaster-and-data-lower-bound",
      "note": "v0.7 with a 20-byte paymasterAndData: too short to carry the paymaster gas limits, so they are reported as undeclared and the prefund is flagged as a lower bound rather than back-filled with zeros.",
      "policy_parameters": {
        "entryPointVersion": "0.7",
        "entryPoint": "0x0000000071727De22E5E9d8BAf0edAc6f37da032",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x1234567890abcdef1234567890abcdef12345678",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000
      },
      "output_payload": {
        "verdict": "USEROP_RECOMPUTED",
        "reasons": [],
        "entry_point": {
          "declared_version": "0.7",
          "address": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "canonical_address_for_declared_version": "0x0000000071727de22e5e9d8baf0edac6f37da032",
          "address_matches_canonical": true
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x1234567890abcdef1234567890abcdef12345678",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": {
          "layout": "v0.7 PackedUserOperation -- abi.encode(address sender, uint256 nonce, bytes32 keccak(initCode), bytes32 keccak(callData), bytes32 accountGasLimits, uint256 preVerificationGas, bytes32 gasFees, bytes32 keccak(paymasterAndData))",
          "word_count": 8,
          "account_gas_limits": "0x000000000000000000000000000249f0000000000000000000000000000186a0",
          "gas_fees": "0x0000000000000000000000003b9aca0000000000000000000000000077359400"
        },
        "field_hashes": {
          "init_code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
          "call_data_hash": "0x8f54361c53196a7fbccb94b6951e30560cd56ed2372519e43070080b38f6f453",
          "paymaster_and_data_hash": "0x5f6174255b44b7ca652c5289d2546de65e4394eb6aa52a40045e01237736d023"
        },
        "packed_user_op_hash": "0x28caa4c27e9878371d91fef8b56c82725bc610ceee82dfea591c9ed994a4a0fa",
        "user_op_hash": "0x5941a0c463570684bd854fca0b38e8ad322594e45df505916a65bee3b8017a7b",
        "gas_accounting": {
          "entry_point_version": "0.7",
          "required_gas": "271000",
          "required_prefund_wei": "542000000000000",
          "prefund_formula": "v0.7: (verificationGasLimit + callGasLimit + preVerificationGas + paymasterVerificationGasLimit + paymasterPostOpGasLimit) * maxFeePerGas",
          "paymaster_present": true,
          "paymaster_address": "0x1234567890abcdef1234567890abcdef12345678",
          "paymaster_multiplier_applied": null,
          "paymaster_verification_gas_limit": null,
          "paymaster_post_op_gas_limit": null,
          "paymaster_fields_note": "paymasterAndData is 20 bytes, shorter than the 52-byte v0.7 header that carries paymasterVerificationGasLimit and paymasterPostOpGasLimit. Those two limits are therefore not declared, and the required prefund below omits them -- it is a LOWER BOUND, not the EntryPoint figure.",
          "declared_base_fee_per_gas": null,
          "effective_gas_price_wei": null,
          "effective_gas_price_basis": "requires_declared_base_fee -- the fee caps differ, so the price depends on block.basefee, which this kernel never fetches. Supply declaredBaseFeePerGas."
        },
        "paymaster_reconciliation": {
          "status": "NOT_ATTEMPTED",
          "missing_declared_inputs": [
            "declaredActualGasUsed",
            "declaredActualGasCostWei",
            "an effective gas price (supply declaredBaseFeePerGas)"
          ],
          "declared_actual_gas_used": null,
          "declared_actual_gas_cost_wei": null,
          "declared_l1_data_fee_wei": null,
          "recomputed_execution_cost_wei": null,
          "recomputed_total_charge_wei": null,
          "residual_wei": null,
          "tolerance_wei": "0",
          "notes": [
            "Reconciliation was not attempted because the inputs above were not declared. This kernel never substitutes a fetched or assumed value for a missing declared one."
          ]
        },
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "4af611152ff8ca2fdff88b13429c215d95007e78cf02274c3c3ae6b5cc1fa14b"
    },
    {
      "name": "indeterminate-missing-entrypoint-version",
      "note": "INDETERMINATE: entryPointVersion is absent. The kernel never falls back to either version, because the two hash different structs.",
      "policy_parameters": {
        "entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000
      },
      "output_payload": {
        "verdict": "INDETERMINATE",
        "reasons": [
          "entryPointVersion is required and must be one of \"0.6\" or \"0.7\" (declared, never inferred -- the two versions hash different structs and use different prefund formulas, so a guess silently produces a wrong userOpHash)"
        ],
        "entry_point": {
          "declared_version": null,
          "address": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "canonical_address_for_declared_version": null,
          "address_matches_canonical": null
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": null,
        "field_hashes": null,
        "packed_user_op_hash": null,
        "user_op_hash": null,
        "gas_accounting": null,
        "paymaster_reconciliation": null,
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "1cef38b004d6aede97a76425b1eee7002a9c533316913225020fc584335e5ab5"
    },
    {
      "name": "indeterminate-unrecognised-entrypoint-version",
      "note": "INDETERMINATE: an entryPointVersion outside the supported set is refused rather than approximated to the nearest supported layout.",
      "policy_parameters": {
        "entryPointVersion": "0.8",
        "entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
        "chainId": 1,
        "sender": "0x2A1530C4C41db0B0b2bB646CB5Eb1A67b7158667",
        "nonce": 0,
        "initCode": "0x",
        "callData": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
        "paymasterAndData": "0x",
        "callGasLimit": 100000,
        "verificationGasLimit": 150000,
        "preVerificationGas": 21000,
        "maxFeePerGas": 2000000000,
        "maxPriorityFeePerGas": 1000000000
      },
      "output_payload": {
        "verdict": "INDETERMINATE",
        "reasons": [
          "entryPointVersion is required and must be one of \"0.6\" or \"0.7\" (declared, never inferred -- the two versions hash different structs and use different prefund formulas, so a guess silently produces a wrong userOpHash)"
        ],
        "entry_point": {
          "declared_version": null,
          "address": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "canonical_address_for_declared_version": null,
          "address_matches_canonical": null
        },
        "chain_id": "1",
        "user_op": {
          "sender": "0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667",
          "nonce": "0",
          "init_code": "0x",
          "call_data": "0xb61d27f60000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
          "paymaster_and_data": "0x",
          "call_gas_limit": "100000",
          "verification_gas_limit": "150000",
          "pre_verification_gas": "21000",
          "max_fee_per_gas": "2000000000",
          "max_priority_fee_per_gas": "1000000000"
        },
        "packed_words": null,
        "field_hashes": null,
        "packed_user_op_hash": null,
        "user_op_hash": null,
        "gas_accounting": null,
        "paymaster_reconciliation": null,
        "never_fetched": [
          "L1 data fee / blob fee: never derived. Post-EIP-4844 it depends on the inclusion-time L1 basefee and blob basefee, neither of which is offline-derivable. Supply declaredL1DataFeeWei to include it in reconciliation.",
          "block.basefee: never fetched. Supply declaredBaseFeePerGas to derive an effective gas price when maxFeePerGas and maxPriorityFeePerGas differ.",
          "EntryPoint contract state: never read. Deposits, stakes, nonce-sequence validity, and prior spend are not consulted.",
          "Chain state of any kind: no RPC, no indexer, no receipt lookup. actualGasUsed and actualGasCost are reconciled only as caller-declared values."
        ],
        "scope_note": "Recomputes the ERC-4337 userOpHash from a caller-supplied UserOperation under a DECLARED EntryPoint version (v0.6 or v0.7), computes the required prefund from caller-supplied gas limits, and reconciles a declared paymaster charge against a charge recomputed from declared inputs. Zero network calls and zero chain reads: every field is caller-declared and echoed back, never independently resolved. L1 data and blob fees are NEVER derived -- post-EIP-4844 they depend on the inclusion-time L1 basefee, which is not offline-derivable, so they participate only when the caller declares them and their absence is reported as a named gap. block.basefee is likewise never fetched: absent a declared value the effective gas price is reported as null with the reason. This node recomputes and reconciles; it makes no claim that any operation was settled, accepted, included, or final, and no claim about signature validity (the signature field is excluded from the hashed struct by the ERC-4337 spec itself)."
      },
      "golden_hash": "f8571ee254fae67f964b6e445236775d4195eb0330c9f1c0f4e0a840ec321b9d"
    }
  ]
}
