From 645d3d4a1f32af0b3284755114a4e566e7127c78 Mon Sep 17 00:00:00 2001 From: Pia Date: Tue, 30 Jan 2024 19:35:59 +0800 Subject: [PATCH] test: dynamic layout datalake --- crates/decoder/src/args_decoder.rs | 1 + crates/decoder/tests/args_decoder.rs | 2 +- .../src/datalake/dynamic_layout_datalake.rs | 3 ++- crates/types/tests/dynamic_layout_datalake.rs | 16 ++++++++++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 crates/types/tests/dynamic_layout_datalake.rs diff --git a/crates/decoder/src/args_decoder.rs b/crates/decoder/src/args_decoder.rs index eb6dac59..5701c536 100644 --- a/crates/decoder/src/args_decoder.rs +++ b/crates/decoder/src/args_decoder.rs @@ -29,6 +29,7 @@ pub fn tasks_decoder(serialized_tasks_batch: String) -> Result Result> { let datalakes_type: DynSolType = "bytes[]".parse()?; let bytes = Vec::from_hex(serialized_datalakes_batch).expect("Invalid hex string"); diff --git a/crates/decoder/tests/args_decoder.rs b/crates/decoder/tests/args_decoder.rs index 0ddc8ae8..a67bee33 100644 --- a/crates/decoder/tests/args_decoder.rs +++ b/crates/decoder/tests/args_decoder.rs @@ -68,4 +68,4 @@ fn test_block_datalake_decoder() { } } -// TODO: dynamic layout datalake test +// TODO: After Solidity calldata format update, update the datalake decoder and write test diff --git a/crates/types/src/datalake/dynamic_layout_datalake.rs b/crates/types/src/datalake/dynamic_layout_datalake.rs index bfbcc886..7a0b8f44 100644 --- a/crates/types/src/datalake/dynamic_layout_datalake.rs +++ b/crates/types/src/datalake/dynamic_layout_datalake.rs @@ -1,7 +1,7 @@ use alloy_dyn_abi::DynSolType; use anyhow::Result; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] pub struct DynamicLayoutDatalake { pub block_number: usize, pub account_address: String, @@ -35,6 +35,7 @@ impl DynamicLayoutDatalake { "(uint256,address,uint256,uint256,uint256,uint256)".parse()?; let decoded = datalake_type.abi_decode(serialized)?; + let value = decoded.as_tuple().unwrap(); let block_number = value[0].as_uint().unwrap().0.to_string().parse::()?; let account_address = value[1].as_address().unwrap().to_string(); diff --git a/crates/types/tests/dynamic_layout_datalake.rs b/crates/types/tests/dynamic_layout_datalake.rs new file mode 100644 index 00000000..30d0b9d8 --- /dev/null +++ b/crates/types/tests/dynamic_layout_datalake.rs @@ -0,0 +1,16 @@ +use types::datalake::dynamic_layout_datalake::DynamicLayoutDatalake; + +#[test] +fn test_dynamic_layout_datalake_serialized() { + let datalake_bytes = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x1f\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00{/\x05\xce\x9a\xe3e\xc3\xdb\xf3\x06W\xe2\xdcdI\x98\x9e\x83\xd6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"; + let decoded_datalake = DynamicLayoutDatalake::from_serialized(datalake_bytes).unwrap(); + let dynamic_layout_datalake = DynamicLayoutDatalake::new( + 10231740, + "0x7b2f05cE9aE365c3DBF30657e2DC6449989e83D6".to_string(), + 5, + 0, + 3, + 1, + ); + assert_eq!(decoded_datalake, dynamic_layout_datalake); +}