From ba5c45ff4fd19bfa0c17e9c3e953120895c21190 Mon Sep 17 00:00:00 2001 From: Zhuo Zhang Date: Fri, 26 Apr 2024 07:00:02 +0000 Subject: [PATCH] fix testool for EIP-1153 --- Cargo.lock | 1 + testool/Cargo.toml | 1 + testool/Config.toml | 10 +++++- testool/codehash.txt | 53 +++++++++++++++++++++++++++++++ testool/src/abi.rs | 14 +++++++- testool/src/main.rs | 19 +++++++---- testool/src/statetest/executor.rs | 12 +++++-- 7 files changed, 99 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f6a9751e34..80ea3819c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5204,6 +5204,7 @@ dependencies = [ "regex", "serde", "serde_json", + "sha3 0.10.8", "strum 0.25.0", "strum_macros 0.25.3", "thiserror", diff --git a/testool/Cargo.toml b/testool/Cargo.toml index 5ea5338946..9ef5f9bb44 100644 --- a/testool/Cargo.toml +++ b/testool/Cargo.toml @@ -17,6 +17,7 @@ external-tracer = { path="../external-tracer" } glob = "0.3" handlebars = "4.3" hex.workspace = true +sha3 = "0.10" keccak256 = { path = "../keccak256" } log.workspace = true itertools.workspace = true diff --git a/testool/Config.toml b/testool/Config.toml index 1f11daea92..e959148547 100644 --- a/testool/Config.toml +++ b/testool/Config.toml @@ -9,6 +9,13 @@ ignore_tests = [ "static_Call50000_sha256_*", ] +[[suite]] +id="EIP1153" +path = "tests/src/GeneralStateTestsFiller/Cancun/stEIP1153-transientStorage/*" +max_gas = 500000 +max_steps = 1000 +ignore_tests = [] + [[suite]] id="EIP2930" path="tests/src/GeneralStateTestsFiller/stEIP2930/*" @@ -62,7 +69,8 @@ paths = [ "stEIP1559/valCausesOOFFiller.yml", "stExample/mergeTestFiller.yml", "Pyspecs", - "Cancun", + "stEIP4844-blobtransactions", + "stEIP5656-MCOPY", # "EIP2930", #"stPreCompiledContracts", #"stZeroKnowledge" diff --git a/testool/codehash.txt b/testool/codehash.txt index 0201a4e276..b1a974725b 100644 --- a/testool/codehash.txt +++ b/testool/codehash.txt @@ -9982,3 +9982,56 @@ ffebfcc6ce81085d934a75577a19dba6466075125c048a0e220a11ce2e457b7f=61036f606452600 ffee2a3059880493356b38e75e9916952f95f87ee6d8d4df78a1eac3eef77ead=6000600780601f60003960006000f5506000600060003e60006000550000fe60016000550000 fff2d4aeae320996e333fbc9ab95240684d056a49fef0ef4e1a1662ed06ffbe5=61024b6064526000600060206000600073b100000000000000000000000000000000000000620493e0f25060006000600060006000731000000000000000000000000000000000000000620493e0f150600060006020600073b100000000000000000000000000000000000000620493e0fa506000600060006000732000000000000000000000000000000000000000620493e0fa5060006000600060006000732000000000000000000000000000000000000000620927c0f100 fffa53d0d2fb1c7fe01fd7a421e0b3796a24222f199963a6d7050cf9161ba16c=61046b6064526000600060206000600073b100000000000000000000000000000000000000620493e0f2506000600060006000733000000000000000000000000000000000000000620493e0fa506000600060206000600073b100000000000000000000000000000000000000620493e0f25060006000600060006000733000000000000000000000000000000000000000620493e0f15060006000600060006000732000000000000000000000000000000000000000620927c0f100 +0b13953be4348918d5eebc8e439a6512b0a3ee6300471172b449a9da42a4a1e5=600a5f5d5f806020818073b00000000000000000000000000000000000000b5af15f5c5f5560015500 +d1e1b266b42b75f5aa1a56c7a4f16ff0485f4d508f27827a5e13e0cfd273755f=5f3560e01c806343ac1c3914602157633f37169214601957005b601f602b565b005b50601f5f5c600155565b602c5f5d6343ac1c3960e01b5f525f8060208180305af15f5c5f5560025556 +1925f29aa2c260e1de3b5517a7b808a144f363ac20954997bb49180f556d32b2=601e5f5d60015c60015500 +83f2328a9666f8e26c8aac9c5883e2cecb3254564f9fef55c48654db9b602127=5f5c60015500 +74f5a8b5474d90baa8ab32de620c11352d18f5054d63556c660c14cda76f3fd9=60585f5d5f5c60015500 +acd163028aaf83a3065f93cb39c12ebe6fd07619e1bea3c95708e0da9435bf35=5f5c5f5560145f5d5f5c60015500 +c7390d213511f68446a476321d7bd59a24a6b9128e9e3eb4dc9a31bfe440ac13=5f3560e01c80630accf73914602157633f37169214601957005b601f6031565b005b50601f605a60ff5d60ff5c600155565b605060ff5d60ff5c5f55630accf73960e01b5f525f8060208180305af160025560ff5c60035556 +e2ac2549e0bd45830ae8f333545332ff08e0ad866cca801ec1e5dcc4e069fb12=5f3560e01c8063e2da2eb014602157633f37169214601957005b601f6029565b005b600b5f5d5f80fd5b600a5f5d5f5c5f55630e2da2eb60e41b5f525f80602081803061fffff16002555f5c60015556 +c550fadcf3a57fecc535c09f22b1196a1fc767534e09eaad3255f4d95c6fcaf9=5f3560e01c806362fdb9be14602157633f37169214601957005b601f602a565b005b50601f604e5f5d565b60375f5d5f5c5f5563317edcdf60e11b5f525f8060208180305af16002555f5c60015556 +d9759451adad0e15a9cd88951a8bcb7a66e4a93cc43ea3e59549d76591873ec9=5f3560e01c80633f37169214601d5763578290e514601957005b6026565b506024603c565b005b60055f5d60065f5d600b60015d600c60015d5f80fd5b60045f5d600a60015d63578290e560e01b5f525f8060208180305af15f555f5c60015560015c60025556 +7a7d60584c18d1d7726c8a7dec56bd9d385ed27e94c7fbfb55cfb5462d31b781=5f3560e01c806370ac643e14602f57806376b85d2314602b57634ccca55314602357005b60296076565b005b605c565b50602960055f5d5f5c5f556376b85d2360e01b5f5260205f818180305af16001555f516002555f5c600355565b634ccca55360e01b5f525f8060208180305af15f5260205ffd5b60065f5d56 +7a152bc303fe94b2665ffe669f873c2388a69798b272c8c2004595d142a5c32f=60015f5d5f8060208173b00000000000000000000000000000000000000b5af45f5c905f556001555f8060208173c00000000000000000000000000000000000000c5af45f5c9060025560035500 +d217dfb4c34d43c3673bd1b9da23bff4d90e8d63fda6637da444a41d66745dbc=60025f5d5f8060208173b00000000000000000000000000000000000000b5af45f5500 +df178a62a42b8e1da38c9699276de1216cf0561e3b587983af5a10b9793c0b26=5f3560e01c80633f371692146030578063611e535a14602757630172927514602357005b603d565b50602e6037565b005b50602e6046565b60035f5d565b5f5c5f5260205ff35b60025f5d63308f29ad60e11b5f525f806020813061fffffa5f555f5c600155630172927560e01b5f5260205f8181305afa6002555f5160035556 +fec992032412489fc1e476128e55ebf4046f44b6f3372b7350581b28880afb2a=5f3560e01c8063f5f4059014602f578063f8dfc2d014602b576362fdb9be14602357005b60296077565b005b605d565b506029600a5f5d5f5c5f55630f8dfc2d60e41b5f5260205f81813061fffffa5f516001556002555f5c600355565b63317edcdf60e11b5f525f8060208180305af15f5260205ff35b600b5f5d56 +e55eb70750a883aec207dd4024e3df2201803ee261f5118377ee825ef163df4e=60025f5d00 +81b99ee199821004756eedc4e0cb140793bc93211cc864dd14723a5312080c36=5f5c60015500 +66d2c03015e53eaebe1579201f80e1cae0fb4fce412f271f68910d264651b3aa=600460025f5d5a5f5c505a9003035f5500 +6ca9e464fb3180b47c710b44214f5015c9a1ad59f4b81cec14bb554d0515659d=60075a60035f5d5a90030360015500 +bd08ed0563c4152b047d422ef5089d45d35c9c09e2a6eac587e83631d1c1fc3a=60035f5d5f80fd +992eb7ba08726772c0a66fbed5207c2830c19fbf8fbdc1f212edd9394902a127=600a5f555f5c60015500 +4d1b56ac854cb155e6ba89270c84596d1478d76f42679bf5a3e6bbc3b26a22da=5f3560e01c8063e2da2eb014602157633f37169214601957005b601f6031565b005b50601f600b5f5d622fffff5f2050565b604e5f5d5f5c5f55630e2da2eb60e41b5f525f80602081803061c350f16002555f5c60015556 +9950ca4debfe1aef1fd8cc8a176c7cf1d8ec5f43712901467aaaeb5fb7d62db6=5f3560e01c8063883264e81460245763f7d6c0eb14601d5760055f55005b6020356055565b50602e6004356030565b005b63f7d6c0eb60e01b5f5260205260205f60408180305af15f555f516002555f5c600155565b5f905b808210606657505f5260205ffd5b9060019081811680156089578214607e575b01906058565b610258815f035d6078565b50610258815d607856 +46dd0b1744cbd2e4cc97b2e59e873d632426a2de2e9ade013ca2024623952fa3=600560015d60015c600a555f806020818073b00000000000000000000000000000000000000b61c350f1600c5560015c600b5500 +997f601f98c4214604229a7dd611ae2fbff0fd4be5e465bd9d1ff741792a8e89=3033146033575b303303600e57005b601b5f35806001555f606f565b5f80808080305af1600255602e6001606b565b600355005b603a5f606b565b80156069576001816054605a93604e84606b565b0183606f565b035f606f565b5f80808080305af16006575f80fd5b005b5c90565b5d56 +68ac906b59383eb593af209f13f9b7813f780aa7b29cb3936b9e81347bfea810=600b5f5d622fffff5f2000 +40f21ca7bebb72258b235dc42bef4f886e10a8ffe2b694f095aad9d4b810ba1b=5f35601e1a5f35601f1a90617e57908060f1146084578060f2146072578060f414606157156051575b6010558015604f578060fd14604b578060fe1460495760ff14604657005b5fff5bfe5b5f80fd5b005b605d63bad0beef5f6096565b6028565b50505f808080633f8390d55af46028565b50505f80808080633f8390d55af26028565b50505f80808080633f8390d55af16028565b5d56 +aa1c63358a626c28d60cd48bc9d3b297dd0bc7c37b1368e9099191e8bebe0f72=5f35601d1a600b5f609b565b15602b576160a760195f609b565b14601f57005b602961beef5f609f565b005b60356160a75f609f565b5f355f525f9060025a04908060f1146088578060f21460755760f4146064575b5060015560605f609b565b5f55005b5f915060208261dead8193f45f6055565b505f91506020828061dead8194f25f6055565b505f91506020828061dead8194f15f6055565b5c90565b5d56 +f1d36c6538bfe903955a2bcf7c3cfda955b65c948d02e9670f88962251931d91=3033146033575b303303600e57005b601b5f35806001555f606f565b5f80808080305af1600255602e6001606b565b600355005b603a5f606b565b80156069576001816054605a93604e84606b565b0183606f565b035f606f565b5f80808080305af26006575f80fd5b005b5c90565b5d56 +9b1a1a400cd022412c0bd65bb2b29dfc0b82b8cb609767cb4568980d9f163c38=5f8060208180803560e01c60043581835582525af160015500 +52f7c7359ace912019c2fc23f33c1a9fd3687c97cff7f1166600f813c999c00d=3033146033575b303303600e57005b601b5f35806001555f606e565b5f80808080305af1600255602e6001606a565b600355005b603a5f606a565b80156068576001816054605a93604e84606a565b0183606e565b035f606e565b5f808080305af46006575f80fd5b005b5c90565b5d56 +87e579b9e9b4c3e996c7aa8850f216fb801d90c8b136f8bf52119494adff8daf=60065f601d565b5f5560106001601d565b6001555f80808080335af1005b5c9056 +0c7eb58fa4909c7e11d629bd9014e693177b579b2e818f71640d802cf5fb6465=63ca11bacc3314603f575b63ca11bacc3303601657005b60235f35806001555f607f565b5f8080808063ca11bacc5af1600255603a6001607b565b600355005b60465f607b565b80156079576001816060606693605a84607b565b0183607f565b035f607f565b5f8080808063ca11bacc5af1600a575f80fd5b005b5c90565b5d56 +6f127d71a27388107ae2d37d0d5315871f3bf58ebb7e9121295e92e9015f63de=3033146033575b303303600e57005b601b5f35806001555f608d565b5f80808080305af1600255602e60016089565b600355005b603a5f6089565b8015608757604a600182035f608d565b5f80808080305af1156083576001606191035f608d565b5f80808080305af115608357607f60016078816089565b016001608d565b6006565b5f80fd5b005b5c90565b5d56 +3f35ac5650a376a9f8e2039ac846cf9feb3b6a2c094902b03e08e0cd662334d6=3033146033575b303303600e57005b601b5f35806001555f608c565b5f80808080305af1600255602e60016088565b600355005b603a5f6088565b8015608657604a600182035f608c565b5f80808080305af2156082576001606191035f608c565b5f808080305af415608257607e60016077816088565b016001608c565b6006565b5f80fd5b005b5c90565b5d56 +f5cfd7c1d640394b21bee8e7f763ecf369690c6299e7f9395dc20e82f527f2c1=60106001600a5f6012565b015f6016565b005b5c90565b5d56 +3093350f415760e48111999fbbad51f2ce4ca9e4743e3ca242971a216a8c8d52=60065f604e565b5f555f8080808061add15af2601155601c5f604e565b6001555f80808061add15af460125560325f604e565b6002555f8080808061add15af160135560495f604e565b600355005b5c9056 +478cccedd806298e9c077da08a1aa35f4a5480acf4679fce432fbca8b3f91c8e=36156081573330036074575b5f3560f81c5f355f5260013603906001908060f1146064578060f21460545760f4146046575b5050333003603b57005b60425f6094565b5f55005b5f918291305af4505f806031565b505f91829182305af2505f806031565b505f91829182305af1505f806031565b607d60015f6098565b600b565b60926001608c5f6094565b015f6098565b005b5c90565b5d56 +517b0a4f54bcd5b4ed6acf56eaa15aea345f867a92e68a081e2b5d493ad00922=366012575b600b5f6020565b5f5260205ff35b601c6160a75f6024565b6004565b5c90565b5d56 +bb82815a7e7c64bc71a975e4f5bb43d70f0d9cc5fdb1844c6a76fa5478e9a2d9=60205f600181806157a75af16010555f515f555f805260205f80806157a75afa6011555f516001555f805260205f6001816157a75afa6012555f5160025500 +b706844b87335b2b7b5d9b5ee6b0cce73f2729b63091b5b62b19df1ba274ddac=6049806101696000396000670de0b6b3a7640000f0506020600060006000600073deadbeef00000000000000000000000000000000620249f0f1506020600060003e6000516000556020600060006000600073deadbeef00000000000000000000000000000001620249f0f1506020600060003e6000516001556020600060006000600073deadbeef00000000000000000000000000000002620249f0f1506020600060003e6000516002556020600060006000600073d2571607e241ecf590ed94b12d87c94babe36db6620249f0f1506020600060006000600073deadbeef00000000000000000000000000000000620249f0f1506020600060003e6000516003556020600060006000600073deadbeef00000000000000000000000000000001620249f0f1506020600060003e6000516004556020600060006000600073deadbeef00000000000000000000000000000002620249f0f1506020600060003e60005160055500fe6000600060006000600073bbbbbbbb00000000000000000000000000000000620186a0f15060178060326000396000f300fe73deadbeef00000000000000000000000000000000ff00 +06ab6256d38756ac18d627a30a060831f10d153c703c23b314a8dffd1c3adaa2=604a80608f6000396000670de0b6b3a7640000f05060016000526020600060206000600073bbbbbbbb00000000000000000000000000000000620249f0f1506020600060006000600073d2571607e241ecf590ed94b12d87c94babe36db6620249f0f15060046020526020600060206020600073bbbbbbbb00000000000000000000000000000000620249f0f100fe6000600060006000600073cccccccc00000000000000000000000000000000620186a0f15060188060326000396000f300fe73deadbeef0000000000000000000000000000000031ff00 +a4307e076568043af32088d4709c505d8ece1fbfba9334475ae20586e04718f3=604a80603b6000396000670de0b6b3a7640000f0506020600060006000600073bbbbbbbb000000000000000000000000000000006203f7a0f100fe6000600060006000600073cccccccc00000000000000000000000000000000620186a0f15060188060326000396000f300fe73deadbeef0000000000000000000000000000000031ff00 +3f229cacce2090e6f5362d253aed1f6b533927d6a5e444d3f2448987962dd0b9=60498061010c6000396000670de0b6b3a7640000f05073a0000000000000000000000000000000000000003f60015573a0000000000000000000000000000000000000003b60025560206000600073a0000000000000000000000000000000000000003c6000516003556020600060006000600073a00000000000000000000000000000000000000062055730f15073a0000000000000000000000000000000000000003f60045573a0000000000000000000000000000000000000003b60055560206000600073a0000000000000000000000000000000000000003c6000516006556020600060006000600073a00000000000000000000000000000000000000062055730f160075500fe6000600060006000600073d000000000000000000000000000000000000000620186a0f15060178060326000396000f300fe73a94f5374fce5edbc8e2a8697c15331677e6ebf0bff00 +54304a698d8c5faea1d65c1d0603c88167a46d0fd26f5df78a3f43e0f00c421e=73d2571607e241ecf590ed94b12d87c94babe36db63f60005260206000f300 +dd5d8b13cc8ccc4b379e4b73d107df94d0c91242a7beabc834f8a3743efc0652=600160015500 +2d748284c6702a1b8d68999c0c5d96082e884568a7fddbcdadada3335f787726=6020600060003773d2571607e241ecf590ed94b12d87c94babe36db63f6000515573d2571607e241ecf590ed94b12d87c94babe36db63b602052600160005101600052602051600051556001600051016000526020516000604073d2571607e241ecf590ed94b12d87c94babe36db63c6040516000515500 +138180b75456577b0cfdcbe4c9d4de869e901ad2575ec8146da7a0e4665a4c8e=60206000600060006000733e180b1862f9d158abb5e519a6d8605540c2368262055730f200 +556f58d70d2405ff88f9388e316932634bd87b50d52ab7bacac1fea860ca0a43=73d2571607e241ecf590ed94b12d87c94babe36db63b60005260206000f300 +42c0326a7bc2f0127882c029bf2b7c8f08d19145eda3bf63557a1ffd47dcd41d=73d2571607e241ecf590ed94b12d87c94babe36db63f60015573d2571607e241ecf590ed94b12d87c94babe36db63b6002556002546000600073d2571607e241ecf590ed94b12d87c94babe36db63c6000516003556020600060006000600073d2571607e241ecf590ed94b12d87c94babe36db6620249f0f15073d2571607e241ecf590ed94b12d87c94babe36db63f60045573d2571607e241ecf590ed94b12d87c94babe36db63b6005556005546000602073d2571607e241ecf590ed94b12d87c94babe36db63c60205160065500 +6331f9dd1b53b7184841e2ce0f225d20b1829f48def78c1d3b0a23b7cd12d5fc=600160015500 +f9db5cf3f933cde97c503e7a7f719db5da49a00b1ba840378102bf727c24f729=73d2571607e241ecf590ed94b12d87c94babe36db63b6000600073d2571607e241ecf590ed94b12d87c94babe36db63c60206000f300 +ae77c8ed1f780178687368265b3179db65f5fef82875b5e54342b1e726e1c126=5f3560e01c8063883264e81460205763f7d6c0eb14601957005b6020356051565b50602a600435602c565b005b63f7d6c0eb60e01b5f5260205260205f60408180305af15f555f516002555f5c600155565b5f905b808210606257505f5260205ffd5b908060306001925d0190605456 diff --git a/testool/src/abi.rs b/testool/src/abi.rs index b368c4d970..6b5545200e 100644 --- a/testool/src/abi.rs +++ b/testool/src/abi.rs @@ -1,5 +1,6 @@ use anyhow::Result; use eth_types::{Bytes, U256}; +use sha3::Digest; /// encodes an abi call (e.g. "f(uint) 1") pub fn encode_funccall(spec: &str) -> Result { @@ -73,8 +74,19 @@ pub fn encode_funccall(spec: &str) -> Result { state_mutability: StateMutability::Payable, constant: Some(false), }; + // Shoule be false for stEIP1153-transientStorage, + // due to this bughttps://github.com/ethereum/tests/issues/1369 + let enable_normalize = true; + let bytes: Vec = if !enable_normalize { + let encoded_params = ethers_core::abi::encode(&args); + let short_signature: Vec = sha3::Keccak256::digest(tokens[0])[0..4].to_vec(); + let bytes: Vec = short_signature.into_iter().chain(encoded_params).collect(); + bytes + } else { + func.encode_input(&args)? + }; - Ok(Bytes::from(func.encode_input(&args)?)) + Ok(Bytes::from(bytes)) } #[cfg(test)] diff --git a/testool/src/main.rs b/testool/src/main.rs index 4517e451da..aba2122b6a 100644 --- a/testool/src/main.rs +++ b/testool/src/main.rs @@ -131,7 +131,11 @@ fn write_test_ids(test_ids: &[String]) -> Result<()> { Ok(()) } -fn run_single_test(test: StateTest, circuits_config: CircuitsConfig) -> Result<()> { +fn run_single_test( + test: StateTest, + suite: TestSuite, + circuits_config: CircuitsConfig, +) -> Result<()> { log::info!("run single test {}", &test); let circuits_config = CircuitsConfig { verbose: true, @@ -139,10 +143,7 @@ fn run_single_test(test: StateTest, circuits_config: CircuitsConfig) -> Result<( }; //let trace = geth_trace(test.clone())?; //crate::utils::print_trace(trace)?; - log::info!( - "result={:?}", - run_test(test, TestSuite::default(), circuits_config) - ); + log::info!("result={:?}", run_test(test, suite, circuits_config)); Ok(()) } @@ -161,7 +162,7 @@ fn go() -> Result<()> { if let Some(oneliner) = &args.oneliner { let test = StateTest::parse_oneline_spec(oneliner)?; - run_single_test(test, circuits_config)?; + run_single_test(test, Default::default(), circuits_config)?; return Ok(()); } @@ -197,7 +198,11 @@ fn go() -> Result<()> { } bail!("test '{}' not found", test_id); } - run_single_test(state_tests_filtered.remove(0).clone(), circuits_config)?; + run_single_test( + state_tests_filtered.remove(0).clone(), + suite, + circuits_config, + )?; return Ok(()); }; diff --git a/testool/src/statetest/executor.rs b/testool/src/statetest/executor.rs index f781a5f8d4..3221e04102 100644 --- a/testool/src/statetest/executor.rs +++ b/testool/src/statetest/executor.rs @@ -292,10 +292,18 @@ fn trace_config_to_witness_block_l2( .into_iter() .map(From::from) .collect::>(); + // if the trace exceed max steps, we cannot fit it into circuit - // but we still want to make it go through bus-mapping generation + // but sometimes we still want to make it go through bus-mapping generation + let always_run_bus_mapping = false; let exceed_max_steps = match check_geth_traces(&geth_traces, &suite, verbose) { - Err(StateTestError::SkipTestMaxSteps(steps)) => steps, + Err(StateTestError::SkipTestMaxSteps(steps)) => { + if always_run_bus_mapping { + steps + } else { + return Err(StateTestError::SkipTestMaxSteps(steps)); + } + } Err(e) => return Err(e), Ok(_) => 0, };