{
  "schemaVersion": 1,
  "article": {
    "wpId": 6043,
    "permalink": "/archives/6043",
    "sourceIssue": 185
  },
  "checkedAt": "2026-08-31",
  "localFixture": {
    "externalRpc": false,
    "mainnetFork": false,
    "realWallet": false,
    "userPrivateKey": false,
    "publicTransactionBroadcast": false,
    "realAsset": false,
    "environment": {
      "foundry": "1.8.0",
      "foundryCommit": "61ae26af36320d4fa1020f7db53785885e29eeb5",
      "foundryArchiveSha256": "0599b28a19af97c3ae91fab12ad868a1922db7770c4adff6b6d26235862153d0",
      "solidity": "0.8.36",
      "viem": "2.56.0",
      "compiledEvmVersion": "shanghai",
      "executedHardforks": [
        "shanghai",
        "cancun"
      ],
      "optimizer": true,
      "optimizerRuns": 200,
      "fuzzRuns": 256,
      "seed": "0x6043604360436043604360436043604360436043604360436043604360436043"
    },
    "tests": {
      "status": "pass",
      "unitTestCountPerHardfork": 6,
      "hardforks": [
        "shanghai",
        "cancun"
      ],
      "unitTests": [
        "testCreate2AddressUsesFactorySaltAndInitCodeHash",
        "testTargetRecordsCodeStorageBalanceAndNonce",
        "testSameSaltAndInitCodeCollideWhileTargetExists",
        "testDifferentConstructorArgumentChangesInitCodeHashAndAddress",
        "testSelfdestructTransfersBalanceButInspectionInsideTransactionIsNotFinalState",
        "testConstructorSelfdestructCannotReuseCreate2AddressInsideSameTransaction"
      ],
      "anvilLifecycleCount": 2
    },
    "observations": {
      "shanghai": {
        "hardfork": "shanghai",
        "chainId": 31343,
        "factory": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
        "target": {
          "address": "0x9e483aef34AE86ef0505C4d388E1B2a2f0099ab4",
          "salt": "0xa4a8255bf6ba029e799c0c63717059d770d611f0ba7265f7ba4fa968f90e3336",
          "initCodeHash": "0x4374e579b3e9ca8016bb67cbb2b2797f5f3bca94f3b24ce24ef9a3f249c433d9",
          "before": {
            "codeBytes": 195,
            "codeHash": "0x26a876131269615b0c40dce5db4bf7e1751efd0480589caff78e8b5340161945",
            "storageSlot0": "77",
            "balanceWei": "1000000000000000000",
            "nonce": 1
          },
          "afterSelfdestruct": {
            "codeBytes": 0,
            "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
            "storageSlot0": "0",
            "balanceWei": "0",
            "nonce": 0
          },
          "beneficiaryDeltaWei": "1000000000000000000",
          "destroyGasUsed": "29275",
          "destroyTrace": {
            "failed": false,
            "gas": "29275",
            "returnValue": "0x",
            "opCounts": {
              "CREATE2": 0,
              "SELFDESTRUCT": 1,
              "SSTORE": 0
            }
          },
          "redeployAttempt": {
            "returnedAddress": "0x9e483aef34AE86ef0505C4d388E1B2a2f0099ab4",
            "succeeded": true,
            "gasUsed": "118801",
            "trace": {
              "failed": false,
              "gas": "118801",
              "returnValue": "0x0000000000000000000000009e483aef34ae86ef0505c4d388e1b2a2f0099ab4",
              "opCounts": {
                "CREATE2": 1,
                "SELFDESTRUCT": 0,
                "SSTORE": 1
              }
            },
            "stateAfterAttempt": {
              "codeBytes": 195,
              "codeHash": "0x26a876131269615b0c40dce5db4bf7e1751efd0480589caff78e8b5340161945",
              "storageSlot0": "77",
              "balanceWei": "0",
              "nonce": 1
            }
          }
        },
        "sameTransactionException": {
          "address": "0xa6eA9BFAaAe7874535844b5650643889DB1B984E",
          "salt": "0xaa1cf49cc3f2d7c1012b0679914221952610b14dc1a6efac910c56982dcfb290",
          "initCodeHash": "0x5ed4a34428aa97bd6b1a3baf148b64bd09cd91ae364dc11ee61c6ff74dc43449",
          "firstCreate2Address": "0xa6eA9BFAaAe7874535844b5650643889DB1B984E",
          "secondCreate2Address": "0x0000000000000000000000000000000000000000",
          "afterFirstTransaction": {
            "codeBytes": 0,
            "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
            "storageSlot0": "0",
            "balanceWei": "0",
            "nonce": 0
          },
          "nextTransactionFirstCreate2Address": "0xa6eA9BFAaAe7874535844b5650643889DB1B984E",
          "nextTransactionSecondCreate2Address": "0x0000000000000000000000000000000000000000",
          "afterSecondTransaction": {
            "codeBytes": 0,
            "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
            "storageSlot0": "0",
            "balanceWei": "0",
            "nonce": 0
          },
          "beneficiaryDeltaAcrossTwoTransactionsWei": "2000000000000000000",
          "firstTransactionGasUsed": "1972692",
          "firstTransactionTrace": {
            "failed": false,
            "gas": "1972692",
            "returnValue": "0x000000000000000000000000a6ea9bfaaae7874535844b5650643889db1b984e0000000000000000000000000000000000000000000000000000000000000000",
            "opCounts": {
              "CREATE2": 2,
              "SELFDESTRUCT": 1,
              "SSTORE": 0
            }
          }
        }
      },
      "cancun": {
        "hardfork": "cancun",
        "chainId": 31344,
        "factory": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
        "target": {
          "address": "0x9e483aef34AE86ef0505C4d388E1B2a2f0099ab4",
          "salt": "0xa4a8255bf6ba029e799c0c63717059d770d611f0ba7265f7ba4fa968f90e3336",
          "initCodeHash": "0x4374e579b3e9ca8016bb67cbb2b2797f5f3bca94f3b24ce24ef9a3f249c433d9",
          "before": {
            "codeBytes": 195,
            "codeHash": "0x26a876131269615b0c40dce5db4bf7e1751efd0480589caff78e8b5340161945",
            "storageSlot0": "77",
            "balanceWei": "1000000000000000000",
            "nonce": 1
          },
          "afterSelfdestruct": {
            "codeBytes": 195,
            "codeHash": "0x26a876131269615b0c40dce5db4bf7e1751efd0480589caff78e8b5340161945",
            "storageSlot0": "77",
            "balanceWei": "0",
            "nonce": 1
          },
          "beneficiaryDeltaWei": "1000000000000000000",
          "destroyGasUsed": "29275",
          "destroyTrace": {
            "failed": false,
            "gas": "29275",
            "returnValue": "0x",
            "opCounts": {
              "CREATE2": 0,
              "SELFDESTRUCT": 1,
              "SSTORE": 0
            }
          },
          "redeployAttempt": {
            "returnedAddress": "0x0000000000000000000000000000000000000000",
            "succeeded": false,
            "gasUsed": "1969775",
            "trace": {
              "failed": false,
              "gas": "1969775",
              "returnValue": "0x0000000000000000000000000000000000000000000000000000000000000000",
              "opCounts": {
                "CREATE2": 1,
                "SELFDESTRUCT": 0,
                "SSTORE": 0
              }
            },
            "stateAfterAttempt": {
              "codeBytes": 195,
              "codeHash": "0x26a876131269615b0c40dce5db4bf7e1751efd0480589caff78e8b5340161945",
              "storageSlot0": "77",
              "balanceWei": "0",
              "nonce": 1
            }
          }
        },
        "sameTransactionException": {
          "address": "0xa6eA9BFAaAe7874535844b5650643889DB1B984E",
          "salt": "0xaa1cf49cc3f2d7c1012b0679914221952610b14dc1a6efac910c56982dcfb290",
          "initCodeHash": "0x5ed4a34428aa97bd6b1a3baf148b64bd09cd91ae364dc11ee61c6ff74dc43449",
          "firstCreate2Address": "0xa6eA9BFAaAe7874535844b5650643889DB1B984E",
          "secondCreate2Address": "0x0000000000000000000000000000000000000000",
          "afterFirstTransaction": {
            "codeBytes": 0,
            "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
            "storageSlot0": "0",
            "balanceWei": "0",
            "nonce": 0
          },
          "nextTransactionFirstCreate2Address": "0xa6eA9BFAaAe7874535844b5650643889DB1B984E",
          "nextTransactionSecondCreate2Address": "0x0000000000000000000000000000000000000000",
          "afterSecondTransaction": {
            "codeBytes": 0,
            "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
            "storageSlot0": "0",
            "balanceWei": "0",
            "nonce": 0
          },
          "beneficiaryDeltaAcrossTwoTransactionsWei": "2000000000000000000",
          "firstTransactionGasUsed": "1972692",
          "firstTransactionTrace": {
            "failed": false,
            "gas": "1972692",
            "returnValue": "0x000000000000000000000000a6ea9bfaaae7874535844b5650643889db1b984e0000000000000000000000000000000000000000000000000000000000000000",
            "opCounts": {
              "CREATE2": 2,
              "SELFDESTRUCT": 1,
              "SSTORE": 0
            }
          }
        }
      }
    }
  },
  "fixedConclusions": {
    "existingContractShanghai": "code, storage and account are removed after transaction finalization; balance is transferred",
    "existingContractCancun": "code, storage and nonce remain after transaction finalization; balance is transferred",
    "persistentCreate2Shanghai": "same salt and init code can deploy again in a later transaction after deletion",
    "persistentCreate2Cancun": "redeploy fails because code and nonce remain after selfdestruct",
    "sameTransactionException": "constructor selfdestruct leaves no account after finalization and the address can be reused in a later transaction",
    "sameTransactionCollision": "a second CREATE2 to the same address in the same transaction returns zero"
  },
  "limits": [
    "Shanghai is a deterministic local pre-change semantic fixture, not a historical mainnet replay.",
    "Cancun is a deterministic local current-rule fixture; other chains can activate different fork rules at different times.",
    "Compilation target does not select live-chain SELFDESTRUCT semantics; the executing EVM hardfork does.",
    "The fixture demonstrates state transitions and CREATE2 collisions; it is not production deployment code or an audit.",
    "No public RPC, mainnet fork, wallet extension, user key, public transaction or real asset is used."
  ]
}
