diff --git a/prdoc/pr_10380.prdoc b/prdoc/pr_10380.prdoc new file mode 100644 index 0000000000000..43dd01efb711a --- /dev/null +++ b/prdoc/pr_10380.prdoc @@ -0,0 +1,8 @@ +title: pallet-revive benchmark opcode fix +doc: +- audience: Runtime Dev + description: "Benchmark opcode was using the invalid opcode instead of defining\ + \ a new one. \n" +crates: +- name: pallet-revive + bump: patch diff --git a/substrate/frame/revive/src/benchmarking.rs b/substrate/frame/revive/src/benchmarking.rs index 86210d70154bc..96ca180e2e3d5 100644 --- a/substrate/frame/revive/src/benchmarking.rs +++ b/substrate/frame/revive/src/benchmarking.rs @@ -2100,7 +2100,7 @@ mod benchmarks { i: Linear<{ 10 * 1024 }, { 48 * 1024 }>, ) -> Result<(), BenchmarkError> { use crate::vm::evm::instructions::BENCH_INIT_CODE; - let mut setup = CallSetup::::new(VmBinaryModule::dummy()); + let mut setup = CallSetup::::new(VmBinaryModule::evm_sized(0)); setup.set_origin(ExecOrigin::from_account_id(setup.contract().account_id.clone())); setup.set_balance(caller_funding::()); @@ -2115,9 +2115,11 @@ mod benchmarks { let init_code = vec![BENCH_INIT_CODE; i as usize]; let _ = interpreter.memory.resize(0, init_code.len()); + let salt = U256::from(42u64); interpreter.memory.set_data(0, 0, init_code.len(), &init_code); - // Setup stack for create instruction [value, offset, size] + // Setup stack for create instruction [value, offset, size, salt] + let _ = interpreter.stack.push(salt); let _ = interpreter.stack.push(U256::from(init_code.len())); let _ = interpreter.stack.push(U256::zero()); let _ = interpreter.stack.push(value); @@ -2125,7 +2127,7 @@ mod benchmarks { let result; #[block] { - result = instructions::contract::create::(&mut interpreter); + result = instructions::contract::create::(&mut interpreter); } assert!(result.is_continue()); diff --git a/substrate/frame/revive/src/vm/evm/instructions/mod.rs b/substrate/frame/revive/src/vm/evm/instructions/mod.rs index 423aea073a0a3..e15be8cfee16f 100644 --- a/substrate/frame/revive/src/vm/evm/instructions/mod.rs +++ b/substrate/frame/revive/src/vm/evm/instructions/mod.rs @@ -44,7 +44,7 @@ mod tx_info; pub mod utility; #[cfg(feature = "runtime-benchmarks")] -pub const BENCH_INIT_CODE: u8 = 0xfe; // Arbitrary unused opcode for benchmarking +pub const BENCH_INIT_CODE: u8 = 0x1F; // Arbitrary unused opcode for benchmarking pub fn exec_instruction( interpreter: &mut Interpreter, @@ -215,6 +215,7 @@ pub fn exec_instruction( #[cfg(feature = "runtime-benchmarks")] BENCH_INIT_CODE => control::bench_init_code(), + INVALID => control::invalid(interpreter), _ => control::invalid(interpreter), } }