Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: EOF (Ethereum Object Format) #1143

Merged
merged 70 commits into from
Apr 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
7ea084a
eof
rakita Feb 13, 2024
cd523c3
Merge remote-tracking branch 'origin/main' into eof
rakita Feb 14, 2024
237068f
feat(EOF): Header decoder
rakita Feb 14, 2024
fabdc1b
EofBody decode
rakita Feb 15, 2024
4dd7d3a
Merge remote-tracking branch 'origin/main' into eof
rakita Feb 18, 2024
2ff0f28
disable eof deprecated opcodes
rakita Feb 18, 2024
20fcdaf
add eof instructions
rakita Feb 20, 2024
22bf551
temp tests
rakita Feb 20, 2024
318d775
Merge remote-tracking branch 'origin/main' into eof
rakita Feb 22, 2024
33974b3
rjump instructions
rakita Feb 22, 2024
a638385
eof rjump with tests
rakita Feb 23, 2024
2d14e04
Merge remote-tracking branch 'origin/main' into eof
rakita Feb 23, 2024
ad45264
EOF bytecode
rakita Feb 25, 2024
2c29f1b
callf, retf, jumpf
rakita Feb 26, 2024
ecc4467
tests for callf,retf,jumpf
rakita Feb 27, 2024
3979a12
small rename
rakita Feb 27, 2024
a440503
add dataload, dataloadn and datacopy opcodes
rakita Feb 28, 2024
cb3d93a
refactor calls
rakita Feb 29, 2024
1dabca4
blueprint for creates
rakita Mar 1, 2024
788182f
Merge remote-tracking branch 'origin/main' into eof
rakita Mar 1, 2024
4354b6d
eof create inputs
rakita Mar 2, 2024
207ad21
some wip
rakita Mar 4, 2024
dc07460
Merge remote-tracking branch 'origin/main' into eof
rakita Mar 4, 2024
2e48462
add eofcreate structs and exccall flow
rakita Mar 4, 2024
48abbe6
wip eofcreate code flow and handlers
rakita Mar 4, 2024
9d8f612
fix tests
rakita Mar 4, 2024
0fc345a
eof creates
rakita Mar 5, 2024
862d85b
Merge remote-tracking branch 'origin/main' into eof
rakita Mar 7, 2024
fab521a
refactor eofcreate a little
rakita Mar 7, 2024
e5abe46
some work on extcall
rakita Mar 8, 2024
d3dd1a9
Merge remote-tracking branch 'origin/main' into eof
rakita Mar 14, 2024
4aa166a
feat: refactor simplify CallInput, eof extcalls
rakita Mar 15, 2024
449f243
feat: restructure OpCode and add stack input/output num
rakita Mar 18, 2024
183adaf
add flags for stack_io and not_eof
rakita Mar 19, 2024
07c721a
wip eof verification
rakita Mar 19, 2024
42a04c1
Merge remote-tracking branch 'origin/main' into eof
rakita Mar 19, 2024
91d98c3
wip validation
rakita Mar 21, 2024
d28122e
EOF Bytecode validity
rakita Mar 23, 2024
77939ac
insturction and jump validation seems good
rakita Mar 23, 2024
28d1f74
merged eof validate function
rakita Mar 26, 2024
2db230a
EOP test runner, fex fixes
rakita Mar 26, 2024
f219ed6
RETURNDATALOAD, fix call bugs, refactor gas warm/cold calc
rakita Mar 27, 2024
e996fac
Merge remote-tracking branch 'origin/main' into eof
rakita Mar 27, 2024
8a4d9a2
debug session, rjumpv imm fix
rakita Mar 28, 2024
54d3d23
fixing validation bugs, bytecode decoder for EOF in revme
rakita Mar 31, 2024
c1c31ec
pass most of validation tests
rakita Apr 2, 2024
b8f7fad
bounds check moved to decode
rakita Apr 2, 2024
fedbd70
Merge remote-tracking branch 'origin/main' into eof
rakita Apr 2, 2024
605431c
Merge remote-tracking branch 'origin/main' into eof
rakita Apr 3, 2024
1ae9563
Fix merge compilation, fmt
rakita Apr 3, 2024
7b73779
TXCREATE work
rakita Apr 7, 2024
761aa2b
remove training wheels, panic on eof
rakita Apr 7, 2024
85d062b
Merge remote-tracking branch 'origin/main' into eof
rakita Apr 7, 2024
efa7327
test fix and std
rakita Apr 7, 2024
691ad44
std
rakita Apr 7, 2024
8faa75a
fix test
rakita Apr 7, 2024
4af1988
fix valgrind
rakita Apr 7, 2024
c337cd9
fix tests
rakita Apr 7, 2024
a19865f
clippy
rakita Apr 7, 2024
647a8d2
removed checked logic
rakita Apr 7, 2024
98745cc
small change
rakita Apr 7, 2024
65cf05c
no std revm-test
rakita Apr 7, 2024
6294f0f
Merge remote-tracking branch 'origin/main' into eof
rakita Apr 7, 2024
8162f32
check pending TODOs
rakita Apr 7, 2024
63ffb17
Merge remote-tracking branch 'origin/main' into eof
rakita Apr 7, 2024
0222cc0
build check no_std
rakita Apr 7, 2024
eeeb798
doc
rakita Apr 7, 2024
4c60857
chore: move some files. cleanup comments
rakita Apr 9, 2024
55c19ad
Merge remote-tracking branch 'origin/main' into eof
rakita Apr 9, 2024
d24dcbb
fix fmt,clippy and compile error
rakita Apr 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion bins/revm-test/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ edition = "2021"
[dependencies]
bytes = "1.6"
hex = "0.4"
revm = { path = "../../crates/revm", version = "8.0.0",default-features=false }
revm = { path = "../../crates/revm", version = "8.0.0", default-features=false }
microbench = "0.5"
alloy-sol-macro = "0.7.0"
alloy-sol-types = "0.7.0"
Expand Down
16 changes: 2 additions & 14 deletions bins/revm-test/src/bin/analysis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@ use revm::{
use std::time::Instant;

fn main() {
let contract_data : Bytes = hex::decode( "6060604052341561000f57600080fd5b604051610dd1380380610dd18339810160405280805190602001909190805182019190602001805190602001909190805182019190505083600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008190555082600390805190602001906100a79291906100e3565b5081600460006101000a81548160ff021916908360ff16021790555080600590805190602001906100d99291906100e3565b5050505050610188565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061012457805160ff1916838001178555610152565b82800160010185558215610152579182015b82811115610151578251825591602001919060010190610136565b5b50905061015f9190610163565b5090565b61018591905b80821115610181576000816000905550600101610169565b5090565b90565b610c3a806101976000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b4578063095ea7b31461014257806318160ddd1461019c57806323b872dd146101c557806327e235e31461023e578063313ce5671461028b5780635c658165146102ba57806370a082311461032657806395d89b4114610373578063a9059cbb14610401578063dd62ed3e1461045b575b600080fd5b34156100bf57600080fd5b6100c76104c7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101075780820151818401526020810190506100ec565b50505050905090810190601f1680156101345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014d57600080fd5b610182600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610565565b604051808215151515815260200191505060405180910390f35b34156101a757600080fd5b6101af610657565b6040518082815260200191505060405180910390f35b34156101d057600080fd5b610224600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061065d565b604051808215151515815260200191505060405180910390f35b341561024957600080fd5b610275600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108f7565b6040518082815260200191505060405180910390f35b341561029657600080fd5b61029e61090f565b604051808260ff1660ff16815260200191505060405180910390f35b34156102c557600080fd5b610310600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610922565b6040518082815260200191505060405180910390f35b341561033157600080fd5b61035d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610947565b6040518082815260200191505060405180910390f35b341561037e57600080fd5b610386610990565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c65780820151818401526020810190506103ab565b50505050905090810190601f1680156103f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561040c57600080fd5b610441600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610a2e565b604051808215151515815260200191505060405180910390f35b341561046657600080fd5b6104b1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b87565b6040518082815260200191505060405180910390f35b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b820191906000526020600020905b81548152906001019060200180831161054057829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561072e5750828110155b151561073957600080fd5b82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156108865782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b60016020528060005260406000206000915090505481565b600460009054906101000a900460ff1681565b6002602052816000526040600020602052806000526040600020600091509150505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a265780601f106109fb57610100808354040283529160200191610a26565b820191906000526020600020905b815481529060010190602001808311610a0957829003601f168201915b505050505081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a7e57600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a72305820df254047bc8f2904ad3e966b6db116d703bebd40efadadb5e738c836ffc8f58a0029" ).unwrap().into();
let contract_data : Bytes = hex::decode( "6060604052341561000f57600080fd5b604051610dd1380380610dd18339810160405280805190602001909190805182019190602001805190602001909190805182019190505083600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008190555082600390805190602001906100a79291906100e3565b5081600460006101000a81548160ff021916908360ff16021790555080600590805190602001906100d99291906100e3565b5050505050610188565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061012457805160ff1916838001178555610152565b82800160010185558215610152579182015b82811115610151578251825591602001919060010190610136565b5b50905061015f9190610163565b5090565b61018591905b80821115610181576000816000905550600101610169565b5090565b90565b610c3a806101976000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b4578063095ea7b31461014257806318160ddd1461019c57806323b872dd146101c557806327e235e31461023e578063313ce5671461028b5780635c658165146102ba57806370a082311461032657806395d89b4114610373578063a9059cbb14610401578063dd62ed3e1461045b575b600080fd5b34156100bf57600080fd5b6100c76104c7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101075780820151818401526020810190506100ec565b50505050905090810190601f1680156101345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014d57600080fd5b610182600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610565565b604051808215151515815260200191505060405180910390f35b34156101a757600080fd5b6101af610657565b6040518082815260200191505060405180910390f35b34156101d057600080fd5b610224600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061065d565b604051808215151515815260200191505060405180910390f35b341561024957600080fd5b610275600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108f7565b6040518082815260200191505060405180910390f35b341561029657600080fd5b61029e61090f565b604051808260ff1660ff16815260200191505060405180910390f35b34156102c557600080fd5b610310600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610922565b6040518082815260200191505060405180910390f35b341561033157600080fd5b61035d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610947565b6040518082815260200191505060405180910390f35b341561037e57600080fd5b610386610990565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c65780820151818401526020810190506103ab565b50505050905090810190601f1680156103f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561040c57600080fd5b610441600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610a2e565b604051808215151515815260200191505060405180910390f35b341561046657600080fd5b6104b1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b87565b6040518082815260200191505060405180910390f35b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b820191906000526020600020905b81548152906001019060200180831161054057829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561072e5750828110155b151561073957600080fd5b82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156108865782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b60016020528060005260406000206000915090505481565b600460009054906101000a900460ff1681565b6002602052816000526040600020602052806000526040600020600091509150505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a265780601f106109fb57610100808354040283529160200191610a26565b820191906000526020600020905b815481529060010190602001808311610a0957829003601f168201915b505050505081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a7e57600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a72305820df254047bc8f2904ad3e966b6db116d703bebd40efadadb5e738c836ffc8f58a0029").unwrap().into();

let bytecode_raw = Bytecode::new_raw(contract_data.clone());
let bytecode_checked = Bytecode::new_raw(contract_data.clone()).to_checked();
let bytecode_analysed = to_analysed(Bytecode::new_raw(contract_data));

// BenchmarkDB is dummy state that implements Database trait.
Expand All @@ -36,17 +35,6 @@ fn main() {
}
println!("Raw elapsed time: {:?}", timer.elapsed());

let mut evm = evm
.modify()
.reset_handler_with_db(BenchmarkDB::new_bytecode(bytecode_checked))
.build();

let timer = Instant::now();
for _ in 0..30000 {
let _ = evm.transact().unwrap();
}
println!("Checked elapsed time: {:?}", timer.elapsed());

let mut evm = evm
.modify()
.reset_handler_with_db(BenchmarkDB::new_bytecode(bytecode_analysed))
Expand All @@ -56,5 +44,5 @@ fn main() {
for _ in 0..30000 {
let _ = evm.transact().unwrap();
}
println!("Analysed elapsed time: {:?}", timer.elapsed());
println!("Analyzed elapsed time: {:?}", timer.elapsed());
}
7 changes: 7 additions & 0 deletions bins/revme/src/cmd.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pub mod bytecode;
pub mod evmrunner;
pub mod format_kzg_setup;
pub mod statetest;
Expand All @@ -18,6 +19,8 @@ pub enum MainCmd {
about = "Evm runner command allows running arbitrary evm bytecode.\nBytecode can be provided from cli or from file with --path option."
)]
Evm(evmrunner::Cmd),
#[structopt(alias = "bc", about = "Prints the opcodes of an hex Bytecodes.")]
Bytecode(bytecode::Cmd),
}

#[derive(Debug, thiserror::Error)]
Expand All @@ -36,6 +39,10 @@ impl MainCmd {
Self::Statetest(cmd) => cmd.run().map_err(Into::into),
Self::FormatKzgSetup(cmd) => cmd.run().map_err(Into::into),
Self::Evm(cmd) => cmd.run().map_err(Into::into),
Self::Bytecode(cmd) => {
cmd.run();
Ok(())
}
}
}
}
39 changes: 39 additions & 0 deletions bins/revme/src/cmd/bytecode.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
use revm::{
interpreter::opcode::eof_printer::print_eof_code,
primitives::{Bytes, Eof},
};
use structopt::StructOpt;

/// Statetest command
#[derive(StructOpt, Debug)]
pub struct Cmd {
/// EOF bytecode in hex format. It bytes start with 0xFE it will be interpreted as a EOF.
/// Otherwise, it will be interpreted as a EOF bytecode.
#[structopt(required = true)]
bytes: String,
}

impl Cmd {
/// Run statetest command.
pub fn run(&self) {
let trimmed = self.bytes.trim_start_matches("0x");
let Ok(bytes) = hex::decode(trimmed) else {
eprintln!("Invalid hex string");
return;
};
let bytes: Bytes = bytes.into();
if bytes.is_empty() {
eprintln!("Empty hex string");
return;
}
if bytes[0] == 0xEF {
let Ok(eof) = Eof::decode(bytes) else {
eprintln!("Invalid EOF bytecode");
return;
};
println!("{:#?}", eof);
} else {
print_eof_code(&bytes)
}
}
}
8 changes: 4 additions & 4 deletions bins/revme/src/cmd/statetest/runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ use revm::{
db::EmptyDB,
inspector_handle_register,
inspectors::TracerEip3155,
interpreter::CreateScheme,
primitives::{
calc_excess_blob_gas, keccak256, Bytecode, Bytes, EVMResultGeneric, Env, ExecutionResult,
SpecId, TransactTo, B256, U256,
Expand Down Expand Up @@ -332,7 +331,7 @@ pub fn execute_test_suite(

let to = match unit.transaction.to {
Some(add) => TransactTo::Call(add),
None => TransactTo::Create(CreateScheme::Create),
None => TransactTo::Create,
};
env.tx.transact_to = to;

Expand Down Expand Up @@ -398,7 +397,7 @@ pub fn execute_test_suite(
// print only once or
// if we are already in trace mode, just return error
static FAILED: AtomicBool = AtomicBool::new(false);
if FAILED.swap(true, Ordering::SeqCst) {
if trace || FAILED.swap(true, Ordering::SeqCst) {
return Err(e);
}

Expand All @@ -418,7 +417,8 @@ pub fn execute_test_suite(
let mut evm = Evm::builder()
.with_spec_id(spec_id)
.with_db(state)
.with_external_context(TracerEip3155::new(Box::new(stdout())))
.with_env(env.clone())
.with_external_context(TracerEip3155::new(Box::new(stdout())).without_summary())
.append_handler_register(inspector_handle_register)
.build();
let _ = evm.transact_commit();
Expand Down
10 changes: 10 additions & 0 deletions crates/interpreter/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,16 @@ serde = { version = "1.0", default-features = false, features = [
"rc",
], optional = true }

[dev-dependencies]
walkdir = "2.5"
serde_json = { version = "1.0"}

[[test]]
name = "eof"
path = "tests/eof.rs"
required-features = ["serde"]


[features]
default = ["std"]
std = ["serde?/std", "revm-primitives/std"]
Expand Down
Loading
Loading