object "StorageProbe" { code { datacopy(0, dataoffset("StorageProbe_deployed"), datasize("StorageProbe_deployed")) return(0, datasize("StorageProbe_deployed")) } object "StorageProbe_deployed" { code { let k := calldataload(0) let v := calldataload(32) // >= 9 mapping-style sstores in the `let h := keccak256(..); sstore(h, _)` // form so compound_outlining's keccak256_pair + sstore -> mapping_sstore // fusion (T9, total mapping ops >= 9) triggers. Distinct base slots so // the slots do not collide. The differential runner compares the full // storage state between newyork-PVM and solc-EVM. mstore(0, k) mstore(0x20, 0) let s0 := keccak256(0, 64) sstore(s0, v) mstore(0, k) mstore(0x20, 1) let s1 := keccak256(0, 64) sstore(s1, add(v, 1)) mstore(0, k) mstore(0x20, 2) let s2 := keccak256(0, 64) sstore(s2, not(v)) mstore(0, k) mstore(0x20, 3) let s3 := keccak256(0, 64) sstore(s3, shl(200, v)) mstore(0, k) mstore(0x20, 4) let s4 := keccak256(0, 64) sstore(s4, and(v, 0xFF)) mstore(0, add(k, 1)) mstore(0x20, 0) let s5 := keccak256(0, 64) sstore(s5, v) mstore(0, add(k, 2)) mstore(0x20, 0) let s6 := keccak256(0, 64) sstore(s6, sub(0, v)) mstore(0, not(k)) mstore(0x20, 7) let s7 := keccak256(0, 64) sstore(s7, v) mstore(0, k) mstore(0x20, 8) let s8 := keccak256(0, 64) sstore(s8, v) mstore(0, k) mstore(0x20, 9) let s9 := keccak256(0, 64) sstore(s9, exp(v, 3)) // also read one back through the fused mapping_sload path and store it plainly mstore(0, k) mstore(0x20, 0) let r := sload(keccak256(0, 64)) sstore(0xFFFF, r) return(0, 0) } } }