Affected tests: test_08, test_09, test_12, test_15, test_16, test_17
Description
Nethermind returns fewer accessList entries than Geth for the same
transaction, and for some tests returns a completely empty list. This is
most severe for pre-Berlin blocks (block < 12,244,000, where EIP-2929 was
not yet active): in all five pre-Berlin test cases Nethermind returns either
an empty list or misses the majority of accessed contracts. One post-Berlin
test (test_17, block 0xe4e1bf) also misses one address entry.
The gasUsed values also differ in all affected tests, consistent with
Nethermind not charging warm/cold access costs for the missed addresses and
storage keys.
Pre-Berlin examples (block < 12,244,000)
test_08 — block 0xB71B00 (11,998,976), ERC20 transfer
Expected (Geth): 2 entries, 6 storage keys
{
"accessList": [
{
"address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"storageKeys": [
"0x0000000000000000000000000000000000000000000000000000000000000001",
"0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b",
"0x68f621fe39c397cc54aed6af74827e90c78ae48ff5e52728bb90ff2265002db6",
"0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3",
"0x755c9d80839f4f8436c39a6b618087a1acdb2bfdd0c673d71d0b5563b539aeda",
"0xd6d3c01425af47fc283b281db38f2ef429f68e7bd49f0c4700d84377a3e00c66"
]
},
{ "address": "0xb7277a6e95992041568d9391d09d0122023778a2", "storageKeys": [] }
],
"gasUsed": "0xb58b"
}
Actual (Nethermind):
{ "accessList": [], "gasUsed": "0x7643" }
test_15 — block 0x11573 (71,027), complex call
Expected (Geth): 23 contracts in accessList, error "out of gas: out of gas"
Actual (Nethermind):
{ "accessList": [], "error": "out of gas", "gasUsed": "0x7a120" }
test_09 — block 0xB71B00, missing 1 entry (14 storage keys)
test_12 — block 0xC11F (49,439), missing 1 entry (1 storage key)
test_16 — block 0x1fe0b (130,571), missing 1 entry (3 storage keys)
Post-Berlin example (block ≥ 12,244,000)
test_17 — block 0xe4e1bf (14,999,999), Uniswap-style swap
Nethermind returns 3 entries; Geth returns 4. The missing entry is address
0x829bd824b016326a401d083b33d092293333a830 with no storage keys — it is
CALLed but Nethermind does not include it in the access list. The storage
key contents for the other 3 entries match, but the order differs.
Geth[1]: 0x829bd824..., 0 keys ← missing in Nethermind
Geth[2]: 0xaaaebe6f..., 3 keys
Geth[3]: 0xc02aaa39..., 2 keys
Notes
The concentration of empty access lists in pre-Berlin blocks (tests 08, 09,
12, 15, 16) suggests Nethermind's access list tracking is broken or disabled
for blocks before the Berlin hard fork. Post-Berlin, the tracking mostly
works but still misses address-only entries (addresses CALLed but with no
storage reads/writes).
Affected tests: test_08, test_09, test_12, test_15, test_16, test_17
Description
Nethermind returns fewer
accessListentries than Geth for the sametransaction, and for some tests returns a completely empty list. This is
most severe for pre-Berlin blocks (block < 12,244,000, where EIP-2929 was
not yet active): in all five pre-Berlin test cases Nethermind returns either
an empty list or misses the majority of accessed contracts. One post-Berlin
test (test_17, block 0xe4e1bf) also misses one address entry.
The
gasUsedvalues also differ in all affected tests, consistent withNethermind not charging warm/cold access costs for the missed addresses and
storage keys.
Pre-Berlin examples (block < 12,244,000)
test_08 — block 0xB71B00 (11,998,976), ERC20 transfer
Expected (Geth): 2 entries, 6 storage keys
{ "accessList": [ { "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "storageKeys": [ "0x0000000000000000000000000000000000000000000000000000000000000001", "0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b", "0x68f621fe39c397cc54aed6af74827e90c78ae48ff5e52728bb90ff2265002db6", "0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3", "0x755c9d80839f4f8436c39a6b618087a1acdb2bfdd0c673d71d0b5563b539aeda", "0xd6d3c01425af47fc283b281db38f2ef429f68e7bd49f0c4700d84377a3e00c66" ] }, { "address": "0xb7277a6e95992041568d9391d09d0122023778a2", "storageKeys": [] } ], "gasUsed": "0xb58b" }Actual (Nethermind):
{ "accessList": [], "gasUsed": "0x7643" }test_15 — block 0x11573 (71,027), complex call
Expected (Geth): 23 contracts in accessList, error "out of gas: out of gas"
Actual (Nethermind):
{ "accessList": [], "error": "out of gas", "gasUsed": "0x7a120" }test_09 — block 0xB71B00, missing 1 entry (14 storage keys)
test_12 — block 0xC11F (49,439), missing 1 entry (1 storage key)
test_16 — block 0x1fe0b (130,571), missing 1 entry (3 storage keys)
Post-Berlin example (block ≥ 12,244,000)
test_17 — block 0xe4e1bf (14,999,999), Uniswap-style swap
Nethermind returns 3 entries; Geth returns 4. The missing entry is address
0x829bd824b016326a401d083b33d092293333a830with no storage keys — it isCALLed but Nethermind does not include it in the access list. The storagekey contents for the other 3 entries match, but the order differs.
Notes
The concentration of empty access lists in pre-Berlin blocks (tests 08, 09,
12, 15, 16) suggests Nethermind's access list tracking is broken or disabled
for blocks before the Berlin hard fork. Post-Berlin, the tracking mostly
works but still misses address-only entries (addresses
CALLed but with nostorage reads/writes).