From 1081d90f9875d5f9a60308bd066243d6df031c67 Mon Sep 17 00:00:00 2001 From: Omar Abdulla Date: Sun, 2 Nov 2025 22:55:44 +0300 Subject: [PATCH 1/5] Add the mix hash to the eth blocks --- .../revive/src/evm/block_hash/block_builder.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/substrate/frame/revive/src/evm/block_hash/block_builder.rs b/substrate/frame/revive/src/evm/block_hash/block_builder.rs index c84040c47390f..4c3d0e8a021b4 100644 --- a/substrate/frame/revive/src/evm/block_hash/block_builder.rs +++ b/substrate/frame/revive/src/evm/block_hash/block_builder.rs @@ -168,6 +168,10 @@ impl EthereumBlockBuilder { let tx_hashes = core::mem::replace(&mut self.tx_hashes, Vec::new()); let gas_info = core::mem::replace(&mut self.gas_info, Vec::new()); + let mix_hash = { + let mix_hash = U256::from(crate::vm::evm::DIFFICULTY); + H256(mix_hash.to_big_endian()) + }; let mut block = Block { number: block_number, @@ -186,6 +190,8 @@ impl EthereumBlockBuilder { logs_bloom: self.logs_bloom.bloom.into(), transactions: HashesOrTransactionInfos::Hashes(tx_hashes), + mix_hash, + ..Default::default() }; @@ -275,10 +281,10 @@ mod test { // Each mask in these vectors holds a u16. let masks_len = (hb.state_masks.len() + hb.tree_masks.len() + hb.hash_masks.len()) * 2; - let _size = hb.key.len() + - hb.value.as_slice().len() + - hb.stack.len() * 33 + - masks_len + hb.rlp_buf.len(); + let _size = hb.key.len() + + hb.value.as_slice().len() + + hb.stack.len() * 33 + + masks_len + hb.rlp_buf.len(); } hb.root().0.into() From d8ba091c8f3268f6cb001b0f700a198b242d0c32 Mon Sep 17 00:00:00 2001 From: Omar Abdulla Date: Sun, 2 Nov 2025 23:01:43 +0300 Subject: [PATCH 2/5] Fix formatting --- .../frame/revive/src/evm/block_hash/block_builder.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/substrate/frame/revive/src/evm/block_hash/block_builder.rs b/substrate/frame/revive/src/evm/block_hash/block_builder.rs index 4c3d0e8a021b4..4929e1a604676 100644 --- a/substrate/frame/revive/src/evm/block_hash/block_builder.rs +++ b/substrate/frame/revive/src/evm/block_hash/block_builder.rs @@ -281,10 +281,10 @@ mod test { // Each mask in these vectors holds a u16. let masks_len = (hb.state_masks.len() + hb.tree_masks.len() + hb.hash_masks.len()) * 2; - let _size = hb.key.len() - + hb.value.as_slice().len() - + hb.stack.len() * 33 - + masks_len + hb.rlp_buf.len(); + let _size = hb.key.len() + + hb.value.as_slice().len() + + hb.stack.len() * 33 + + masks_len + hb.rlp_buf.len(); } hb.root().0.into() From d12ca6784466f178bb5abe139a19e8efbba90b28 Mon Sep 17 00:00:00 2001 From: "cmd[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 07:13:41 +0000 Subject: [PATCH 3/5] Update from github-actions[bot] running command 'prdoc --audience runtime_dev --bump patch' --- prdoc/pr_10186.prdoc | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 prdoc/pr_10186.prdoc diff --git a/prdoc/pr_10186.prdoc b/prdoc/pr_10186.prdoc new file mode 100644 index 0000000000000..bd46bbd7cfcac --- /dev/null +++ b/prdoc/pr_10186.prdoc @@ -0,0 +1,12 @@ +title: Return the correct block difficulty from the eth-rpc +doc: +- audience: Runtime Dev + description: |- + # Description + + This PR fixes an issue in the eth-rpc/pallet-revive that was causing it to return an incorrect value for the block's difficulty or prevrandao. + + In the VM/interpreter implementation we use a constant for the block difficulty. However, the eth block construction side was unaware of this constant being used and therefore the RPC was always returning a block difficulty of zero. +crates: +- name: pallet-revive + bump: patch From 6ef7be857bd2ce3d37d2b7f1c431f20b28eda64c Mon Sep 17 00:00:00 2001 From: Omar Abdulla Date: Mon, 3 Nov 2025 15:53:34 +0300 Subject: [PATCH 4/5] Fix tests --- .../revive/src/evm/block_hash/block_builder.rs | 15 +++++++-------- substrate/frame/revive/src/exec/tests.rs | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/substrate/frame/revive/src/evm/block_hash/block_builder.rs b/substrate/frame/revive/src/evm/block_hash/block_builder.rs index 4929e1a604676..8cb9834fab79b 100644 --- a/substrate/frame/revive/src/evm/block_hash/block_builder.rs +++ b/substrate/frame/revive/src/evm/block_hash/block_builder.rs @@ -168,10 +168,9 @@ impl EthereumBlockBuilder { let tx_hashes = core::mem::replace(&mut self.tx_hashes, Vec::new()); let gas_info = core::mem::replace(&mut self.gas_info, Vec::new()); - let mix_hash = { - let mix_hash = U256::from(crate::vm::evm::DIFFICULTY); - H256(mix_hash.to_big_endian()) - }; + + let difficulty = U256::from(crate::vm::evm::DIFFICULTY); + let mix_hash = H256(difficulty.to_big_endian()); let mut block = Block { number: block_number, @@ -281,10 +280,10 @@ mod test { // Each mask in these vectors holds a u16. let masks_len = (hb.state_masks.len() + hb.tree_masks.len() + hb.hash_masks.len()) * 2; - let _size = hb.key.len() + - hb.value.as_slice().len() + - hb.stack.len() * 33 + - masks_len + hb.rlp_buf.len(); + let _size = hb.key.len() + + hb.value.as_slice().len() + + hb.stack.len() * 33 + + masks_len + hb.rlp_buf.len(); } hb.root().0.into() diff --git a/substrate/frame/revive/src/exec/tests.rs b/substrate/frame/revive/src/exec/tests.rs index 11c2cb65e7e53..9b483e922fa5e 100644 --- a/substrate/frame/revive/src/exec/tests.rs +++ b/substrate/frame/revive/src/exec/tests.rs @@ -2842,7 +2842,7 @@ fn block_hash_returns_proper_values() { assert_eq!( ctx.ext.block_hash(U256::from(0)), Some(H256::from(hex_literal::hex!( - "b9be84fb00044994dff6b62393b4c8aa8191717c5ea046f270bd2695524e9f85" + "c2fed5de763ecfa4cb65e8f57838c5517f69db4ede78a30093bf3fad66c5a8cd" ))) ); From 6acb46da1eef444675b0fc36f6f7c25e6aa99d3a Mon Sep 17 00:00:00 2001 From: Omar Abdulla Date: Mon, 3 Nov 2025 15:56:10 +0300 Subject: [PATCH 5/5] Fix formatting --- .../frame/revive/src/evm/block_hash/block_builder.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/substrate/frame/revive/src/evm/block_hash/block_builder.rs b/substrate/frame/revive/src/evm/block_hash/block_builder.rs index 8cb9834fab79b..848429b69ce40 100644 --- a/substrate/frame/revive/src/evm/block_hash/block_builder.rs +++ b/substrate/frame/revive/src/evm/block_hash/block_builder.rs @@ -280,10 +280,10 @@ mod test { // Each mask in these vectors holds a u16. let masks_len = (hb.state_masks.len() + hb.tree_masks.len() + hb.hash_masks.len()) * 2; - let _size = hb.key.len() - + hb.value.as_slice().len() - + hb.stack.len() * 33 - + masks_len + hb.rlp_buf.len(); + let _size = hb.key.len() + + hb.value.as_slice().len() + + hb.stack.len() * 33 + + masks_len + hb.rlp_buf.len(); } hb.root().0.into()