From e2a43b4def667a1fdfe93c6546a73f5adaaf34da Mon Sep 17 00:00:00 2001 From: Ron Date: Sat, 8 Mar 2025 03:31:50 +0800 Subject: [PATCH] Add topic id for outbound tracing (#35) * Add topic id * Update Cargo.lock * Update the abi Message * Update test fixture --- Cargo.lock | 1 + .../pallets/outbound-queue-v2/src/lib.rs | 2 ++ .../pallets/outbound-queue-v2/src/mock.rs | 15 +++++++++++++ .../pallets/outbound-queue-v2/src/test.rs | 22 +++++++++++++++---- .../outbound-queue/src/v2/message.rs | 4 ++++ 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 37fb845277ba0..2def7d14e1ab2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1152,6 +1152,7 @@ dependencies = [ "sp-core 28.0.0", "sp-genesis-builder", "sp-inherents", + "sp-io 30.0.0", "sp-keyring", "sp-offchain", "sp-runtime 31.0.1", diff --git a/bridges/snowbridge/pallets/outbound-queue-v2/src/lib.rs b/bridges/snowbridge/pallets/outbound-queue-v2/src/lib.rs index 28251e8c7bd7f..66f7104f04b2e 100644 --- a/bridges/snowbridge/pallets/outbound-queue-v2/src/lib.rs +++ b/bridges/snowbridge/pallets/outbound-queue-v2/src/lib.rs @@ -335,6 +335,7 @@ pub mod pallet { let committed_message = OutboundMessageWrapper { origin: FixedBytes::from(origin.as_fixed_bytes()), nonce, + topic: FixedBytes::from(id.as_fixed_bytes()), commands: abi_commands, }; let message_abi_encoded_hash = @@ -344,6 +345,7 @@ pub mod pallet { let outbound_message = OutboundMessage { origin, nonce, + topic: id, commands: commands.try_into().map_err(|_| Corrupt)?, }; Messages::::append(outbound_message); diff --git a/bridges/snowbridge/pallets/outbound-queue-v2/src/mock.rs b/bridges/snowbridge/pallets/outbound-queue-v2/src/mock.rs index 905bd8aebcba4..0263b30bbfe04 100644 --- a/bridges/snowbridge/pallets/outbound-queue-v2/src/mock.rs +++ b/bridges/snowbridge/pallets/outbound-queue-v2/src/mock.rs @@ -236,3 +236,18 @@ pub fn mock_message(sibling_para_id: u32) -> Message { .unwrap(), } } + +pub fn mock_register_token_message(sibling_para_id: u32) -> Message { + Message { + origin: H256::from_low_u64_be(sibling_para_id as u64), + id: H256::from_low_u64_be(1), + fee: 1_000, + commands: BoundedVec::try_from(vec![Command::RegisterForeignToken { + token_id: H256::from_low_u64_be(1), + name: vec![], + symbol: vec![], + decimals: 12, + }]) + .unwrap(), + } +} diff --git a/bridges/snowbridge/pallets/outbound-queue-v2/src/test.rs b/bridges/snowbridge/pallets/outbound-queue-v2/src/test.rs index e803831bb86ef..b3651b64b0124 100644 --- a/bridges/snowbridge/pallets/outbound-queue-v2/src/test.rs +++ b/bridges/snowbridge/pallets/outbound-queue-v2/src/test.rs @@ -230,9 +230,7 @@ fn encode_digest_item() { }); } -#[test] -fn encode_mock_message() { - let message: Message = mock_message(1000); +fn encode_mock_message(message: Message) -> Vec { let commands: Vec = message .commands .into_iter() @@ -247,9 +245,25 @@ fn encode_mock_message() { let committed_message = OutboundMessageWrapper { origin: FixedBytes::from(message.origin.as_fixed_bytes()), nonce: 1, + topic: FixedBytes::from(message.id.as_fixed_bytes()), commands, }; let message_abi_encoded = committed_message.abi_encode(); + message_abi_encoded +} + +#[test] +fn encode_unlock_message() { + let message: Message = mock_message(1000); + let message_abi_encoded = encode_mock_message(message); + println!("{}", HexDisplay::from(&message_abi_encoded)); + assert_eq!(hex!("000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000eda338e4dc46038493b885327842fd3e301cab3900000000000000000000000000000000000000000000000000000000000f4240").to_vec(), message_abi_encoded) +} + +#[test] +fn encode_register_pna() { + let message: Message = mock_register_token_message(1000); + let message_abi_encoded = encode_mock_message(message); println!("{}", HexDisplay::from(&message_abi_encoded)); - assert_eq!(hex!("000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000eda338e4dc46038493b885327842fd3e301cab3900000000000000000000000000000000000000000000000000000000000f4240").to_vec(), message_abi_encoded) + assert_eq!(hex!("000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").to_vec(), message_abi_encoded) } diff --git a/bridges/snowbridge/primitives/outbound-queue/src/v2/message.rs b/bridges/snowbridge/primitives/outbound-queue/src/v2/message.rs index 8f851afdd6677..aea756b183e5d 100644 --- a/bridges/snowbridge/primitives/outbound-queue/src/v2/message.rs +++ b/bridges/snowbridge/primitives/outbound-queue/src/v2/message.rs @@ -27,6 +27,8 @@ pub mod abi { bytes32 origin; // Message nonce uint64 nonce; + // Topic + bytes32 topic; // Commands CommandWrapper[] commands; } @@ -110,6 +112,8 @@ pub struct OutboundMessage { pub origin: H256, /// Nonce pub nonce: u64, + /// Topic + pub topic: H256, /// Commands pub commands: BoundedVec>, }