From dfce570ceb33c9b30ec664a053469561215f3a81 Mon Sep 17 00:00:00 2001 From: Alexey Shekhirin Date: Sat, 1 Jun 2024 16:18:14 +0100 Subject: [PATCH] test(rpc): payload V4 decode hashing (#8531) --- .../rpc-types-compat/src/engine/payload.rs | 61 +++++++++++++++++-- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/crates/rpc/rpc-types-compat/src/engine/payload.rs b/crates/rpc/rpc-types-compat/src/engine/payload.rs index e68cee2bbc..e7f4ba0468 100644 --- a/crates/rpc/rpc-types-compat/src/engine/payload.rs +++ b/crates/rpc/rpc-types-compat/src/engine/payload.rs @@ -375,11 +375,12 @@ pub fn execution_payload_from_sealed_block(value: SealedBlock) -> ExecutionPaylo #[cfg(test)] mod tests { use super::{ - block_to_payload_v3, try_into_block, try_payload_v3_to_block, validate_block_hash, + block_to_payload_v3, try_into_block, try_payload_v3_to_block, try_payload_v4_to_block, + validate_block_hash, }; use reth_primitives::{b256, hex, Bytes, U256}; use reth_rpc_types::{ - engine::{CancunPayloadFields, ExecutionPayloadV3}, + engine::{CancunPayloadFields, ExecutionPayloadV3, ExecutionPayloadV4}, ExecutionPayload, ExecutionPayloadV1, ExecutionPayloadV2, }; @@ -417,13 +418,13 @@ mod tests { // this newPayload came with a parent beacon block root, we need to manually insert it // before hashing let parent_beacon_block_root = - hex!("531cd53b8e68deef0ea65edfa3cda927a846c307b0907657af34bc3f313b5871"); - block.header.parent_beacon_block_root = Some(parent_beacon_block_root.into()); + b256!("531cd53b8e68deef0ea65edfa3cda927a846c307b0907657af34bc3f313b5871"); + block.header.parent_beacon_block_root = Some(parent_beacon_block_root); let converted_payload = block_to_payload_v3(block.seal_slow()); // ensure the payloads are the same - assert_eq!((new_payload, Some(parent_beacon_block_root.into())), converted_payload); + assert_eq!((new_payload, Some(parent_beacon_block_root)), converted_payload); } #[test] @@ -603,4 +604,54 @@ mod tests { // Ensure the actual hash is calculated if we set the fields to what they should be validate_block_hash(block_hash_with_blob_fee_fields, block).unwrap(); } + + #[test] + fn parse_payload_v4() { + let s = r#"{ + "baseFeePerGas": "0x2ada43", + "blobGasUsed": "0x0", + "blockHash": "0x86eeb2a4b656499f313b601e1dcaedfeacccab27131b6d4ea99bc69a57607f7d", + "blockNumber": "0x2c", + "depositRequests": [ + { + "amount": "0xe8d4a51000", + "index": "0x0", + "pubkey": "0xaab5f2b3aad5c2075faf0c1d8937c7de51a53b765a21b4173eb2975878cea05d9ed3428b77f16a981716aa32af74c464", + "signature": "0xa889cd238be2dae44f2a3c24c04d686c548f6f82eb44d4604e1bc455b6960efb72b117e878068a8f2cfb91ad84b7ebce05b9254207aa51a1e8a3383d75b5a5bd2439f707636ea5b17b2b594b989c93b000b33e5dff6e4bed9d53a6d2d6889b0c", + "withdrawalCredentials": "0x00ab9364f8bf7561862ea0fc3b69c424c94ace406c4dc36ddfbf8a9d72051c80" + }, + { + "amount": "0xe8d4a51000", + "index": "0x1", + "pubkey": "0xb0b1b3b51cf688ead965a954c5cc206ba4e76f3f8efac60656ae708a9aad63487a2ca1fb30ccaf2ebe1028a2b2886b1b", + "signature": "0xb9759766e9bb191b1c457ae1da6cdf71a23fb9d8bc9f845eaa49ee4af280b3b9720ac4d81e64b1b50a65db7b8b4e76f1176a12e19d293d75574600e99fbdfecc1ab48edaeeffb3226cd47691d24473821dad0c6ff3973f03e4aa89f418933a56", + "withdrawalCredentials": "0x002d2b75f4a27f78e585a4735a40ab2437eceb12ec39938a94dc785a54d62513" + } + ], + "excessBlobGas": "0x0", + "extraData": "0x726574682f76302e322e302d626574612e372f6c696e7578", + "feeRecipient": "0x8943545177806ed17b9f23f0a21ee5948ecaa776", + "gasLimit": "0x1855e85", + "gasUsed": "0x25f98", + "logsBloom": "0x10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "parentHash": "0xd753194ef19b5c566b7eca6e9ebcca03895b548e1e93a20a23d922ba0bc210d4", + "prevRandao": "0x8c52256fd491776dc32f531ad4c0dc1444684741bca15f54c9cd40c60142df90", + "receiptsRoot": "0x510e7fb94279897e5dcd6c1795f6137d8fe02e49e871bfea7999fd21a89f66aa", + "stateRoot": "0x59ae0706a2b47162666fc7af3e30ff7aa34154954b68cc6aed58c3af3d58c9c2", + "timestamp": "0x6643c5a9", + "transactions": [ + "0x02f9021e8330182480843b9aca0085174876e80083030d40944242424242424242424242424242424242424242893635c9adc5dea00000b901a422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012049f42823819771c6bbbd9cb6649850083fd3b6e5d0beb1069342c32d65a3b0990000000000000000000000000000000000000000000000000000000000000030aab5f2b3aad5c2075faf0c1d8937c7de51a53b765a21b4173eb2975878cea05d9ed3428b77f16a981716aa32af74c46400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000ab9364f8bf7561862ea0fc3b69c424c94ace406c4dc36ddfbf8a9d72051c800000000000000000000000000000000000000000000000000000000000000060a889cd238be2dae44f2a3c24c04d686c548f6f82eb44d4604e1bc455b6960efb72b117e878068a8f2cfb91ad84b7ebce05b9254207aa51a1e8a3383d75b5a5bd2439f707636ea5b17b2b594b989c93b000b33e5dff6e4bed9d53a6d2d6889b0cc080a0db786f0d89923949e533680524f003cebd66f32fbd30429a6b6bfbd3258dcf60a05241c54e05574765f7ddc1a742ae06b044edfe02bffb202bf172be97397eeca9", + "0x02f9021e8330182401843b9aca0085174876e80083030d40944242424242424242424242424242424242424242893635c9adc5dea00000b901a422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120d694d6a0b0103651aafd87db6c88297175d7317c6e6da53ccf706c3c991c91fd0000000000000000000000000000000000000000000000000000000000000030b0b1b3b51cf688ead965a954c5cc206ba4e76f3f8efac60656ae708a9aad63487a2ca1fb30ccaf2ebe1028a2b2886b1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002d2b75f4a27f78e585a4735a40ab2437eceb12ec39938a94dc785a54d625130000000000000000000000000000000000000000000000000000000000000060b9759766e9bb191b1c457ae1da6cdf71a23fb9d8bc9f845eaa49ee4af280b3b9720ac4d81e64b1b50a65db7b8b4e76f1176a12e19d293d75574600e99fbdfecc1ab48edaeeffb3226cd47691d24473821dad0c6ff3973f03e4aa89f418933a56c080a099dc5b94a51e9b91a6425b1fed9792863006496ab71a4178524819d7db0c5e88a0119748e62700234079d91ae80f4676f9e0f71b260e9b46ef9b4aff331d3c2318" + ], + "withdrawalRequests": [], + "withdrawals": [] + }"#; + + let payload = serde_json::from_str::(s).unwrap(); + let mut block = try_payload_v4_to_block(payload).unwrap(); + block.header.parent_beacon_block_root = + Some(b256!("d9851db05fa63593f75e2b12c4bba9f47740613ca57da3b523a381b8c27f3297")); + let hash = block.seal_slow().hash(); + assert_eq!(hash, b256!("86eeb2a4b656499f313b601e1dcaedfeacccab27131b6d4ea99bc69a57607f7d")) + } }