From 59b36b43bfc9e629dada13d1bd1395282eec5111 Mon Sep 17 00:00:00 2001
From: Branislav Kontur <bkontur@gmail.com>
Date: Tue, 22 Nov 2022 12:37:54 +0100
Subject: [PATCH] Utility to generate hex bytes for send-message command
 (#1658)

---
 bridges/primitives/test-utils/Cargo.toml |  3 ++
 bridges/primitives/test-utils/src/lib.rs | 44 ++++++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/bridges/primitives/test-utils/Cargo.toml b/bridges/primitives/test-utils/Cargo.toml
index 0a591334577..2bc77e632e5 100644
--- a/bridges/primitives/test-utils/Cargo.toml
+++ b/bridges/primitives/test-utils/Cargo.toml
@@ -15,6 +15,9 @@ sp-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch
 sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false }
 sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false }
 
+[dev-dependencies]
+xcm = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false }
+
 [features]
 default = ["std"]
 std = [
diff --git a/bridges/primitives/test-utils/src/lib.rs b/bridges/primitives/test-utils/src/lib.rs
index c1e95ec6fef..186d192014b 100644
--- a/bridges/primitives/test-utils/src/lib.rs
+++ b/bridges/primitives/test-utils/src/lib.rs
@@ -299,3 +299,47 @@ macro_rules! generate_owned_bridge_module_tests {
 		}
 	};
 }
+
+#[cfg(test)]
+mod tests {
+	use codec::Encode;
+	use sp_application_crypto::sp_core::{hexdisplay, hexdisplay::HexDisplay};
+	use xcm::VersionedXcm;
+
+	fn print_xcm<RuntimeCall>(xcm: &VersionedXcm<RuntimeCall>) {
+		println!("-----------------");
+		println!("xcm (plain): {:?}", xcm);
+		println!("xcm (bytes): {:?}", xcm.encode());
+		println!("xcm (hex): {:?}", hexdisplay::HexDisplay::from(&xcm.encode()));
+	}
+
+	fn as_hex<RuntimeCall>(xcm: &VersionedXcm<RuntimeCall>) -> String {
+		HexDisplay::from(&xcm.encode()).to_string()
+	}
+
+	pub type RuntimeCall = ();
+
+	#[test]
+	fn generate_versioned_xcm_message_hex_bytes() {
+		let xcm: xcm::v2::Xcm<RuntimeCall> = xcm::v2::Xcm(vec![xcm::v2::Instruction::Trap(43)]);
+		let xcm: VersionedXcm<RuntimeCall> = From::from(xcm);
+		print_xcm(&xcm);
+		assert_eq!("020419ac", format!("{}", as_hex(&xcm)));
+
+		let xcm: xcm::v3::Xcm<RuntimeCall> = vec![xcm::v3::Instruction::Trap(43)].into();
+		let xcm: VersionedXcm<RuntimeCall> = From::from(xcm);
+		print_xcm(&xcm);
+		assert_eq!("030419ac", format!("{}", as_hex(&xcm)));
+
+		let xcm: xcm::v3::Xcm<RuntimeCall> = vec![
+			xcm::v3::Instruction::ClearError,
+			xcm::v3::Instruction::ClearTopic,
+			xcm::v3::Instruction::ClearTransactStatus,
+			xcm::v3::Instruction::Trap(43),
+		]
+		.into();
+		let xcm: VersionedXcm<RuntimeCall> = From::from(xcm);
+		print_xcm(&xcm);
+		assert_eq!("0310172c2319ac", format!("{}", as_hex(&xcm)));
+	}
+}
-- 
GitLab