diff --git a/_typos.toml b/_typos.toml index 2e6a122698..55e956b495 100644 --- a/_typos.toml +++ b/_typos.toml @@ -13,4 +13,5 @@ extend-exclude = [ "lodestar/**", "go-ethereum/**", "go.work.sum", + "parachain/Cargo.toml", ] diff --git a/parachain/Cargo.lock b/parachain/Cargo.lock index 8c3bd4f406..0538e28225 100644 --- a/parachain/Cargo.lock +++ b/parachain/Cargo.lock @@ -86,7 +86,7 @@ dependencies = [ "rand 0.8.5", "ruint", "serde", - "tiny-keccak 2.0.2", + "tiny-keccak", ] [[package]] @@ -126,7 +126,7 @@ dependencies = [ "quote", "syn 2.0.48", "syn-solidity", - "tiny-keccak 2.0.2", + "tiny-keccak", ] [[package]] @@ -141,15 +141,6 @@ dependencies = [ "serde", ] -[[package]] -name = "amcl" -version = "0.3.0" -source = "git+https://github.com/snowfork/milagro_bls?rev=a6d66e4eb89015e352fb1c9f7b661ecdbb5b2176#a6d66e4eb89015e352fb1c9f7b661ecdbb5b2176" -dependencies = [ - "parity-scale-codec", - "scale-info", -] - [[package]] name = "android-tzdata" version = "0.1.1" @@ -1331,7 +1322,7 @@ checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ "getrandom 0.2.11", "once_cell", - "tiny-keccak 2.0.2", + "tiny-keccak", ] [[package]] @@ -2092,11 +2083,12 @@ dependencies = [ [[package]] name = "ethabi-decode" -version = "1.3.3" -source = "git+https://github.com/snowfork/ethabi-decode.git?branch=master#6f63405bb33ef4365a1c62b72d499fa0f448118e" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d398648d65820a727d6a81e58b962f874473396a047e4c30bafe3240953417" dependencies = [ "ethereum-types", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -2111,7 +2103,7 @@ dependencies = [ "impl-rlp", "impl-serde", "scale-info", - "tiny-keccak 2.0.2", + "tiny-keccak", ] [[package]] @@ -3223,20 +3215,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "milagro_bls" -version = "1.5.0" -source = "git+https://github.com/snowfork/milagro_bls?rev=a6d66e4eb89015e352fb1c9f7b661ecdbb5b2176#a6d66e4eb89015e352fb1c9f7b661ecdbb5b2176" -dependencies = [ - "amcl", - "hex", - "lazy_static", - "parity-scale-codec", - "rand 0.8.5", - "scale-info", - "zeroize", -] - [[package]] name = "miniz_oxide" version = "0.6.2" @@ -5178,6 +5156,16 @@ dependencies = [ "serde", ] +[[package]] +name = "snowbridge-amcl" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + [[package]] name = "snowbridge-beacon-primitives" version = "0.9.0" @@ -5187,12 +5175,12 @@ dependencies = [ "frame-system", "hex", "hex-literal", - "milagro_bls", "parity-scale-codec", "rlp", "scale-info", "serde", "snowbridge-ethereum", + "snowbridge-milagro-bls", "sp-core", "sp-io", "sp-runtime", @@ -5249,6 +5237,21 @@ dependencies = [ "wasm-bindgen-test", ] +[[package]] +name = "snowbridge-milagro-bls" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "026aa8638f690a53e3f7676024b9e913b1cab0111d1b7b92669d40a188f9d7e6" +dependencies = [ + "hex", + "lazy_static", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "snowbridge-amcl", + "zeroize", +] + [[package]] name = "snowbridge-outbound-queue-merkle-tree" version = "0.9.0" @@ -5330,6 +5333,7 @@ dependencies = [ "snowbridge-core", "snowbridge-ethereum", "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-inbound-queue-fixtures", "snowbridge-router-primitives", "sp-core", "sp-io", @@ -5341,6 +5345,20 @@ dependencies = [ "staging-xcm-executor", ] +[[package]] +name = "snowbridge-pallet-inbound-queue-fixtures" +version = "0.9.0" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal", + "snowbridge-beacon-primitives", + "snowbridge-core", + "sp-core", + "sp-std 8.0.0", +] + [[package]] name = "snowbridge-pallet-outbound-queue" version = "0.9.0" @@ -6518,15 +6536,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "tiny-keccak" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" -dependencies = [ - "crunchy", -] - [[package]] name = "tiny-keccak" version = "2.0.2" diff --git a/parachain/Cargo.toml b/parachain/Cargo.toml index 3c087db89a..fa15ef5ce4 100644 --- a/parachain/Cargo.toml +++ b/parachain/Cargo.toml @@ -8,6 +8,7 @@ resolver = "2" members = [ "pallets/ethereum-client", "pallets/inbound-queue", + "pallets/inbound-queue/fixtures", "pallets/outbound-queue", "pallets/outbound-queue/merkle-tree", "pallets/outbound-queue/runtime-api", diff --git a/parachain/pallets/inbound-queue/Cargo.toml b/parachain/pallets/inbound-queue/Cargo.toml index dc7a07f1ca..63bc488fa9 100644 --- a/parachain/pallets/inbound-queue/Cargo.toml +++ b/parachain/pallets/inbound-queue/Cargo.toml @@ -41,13 +41,13 @@ xcm-executor = { package = "staging-xcm-executor", path = "../../../polkadot-sdk snowbridge-core = { path = "../../primitives/core", default-features = false } snowbridge-ethereum = { path = "../../primitives/ethereum", default-features = false } snowbridge-router-primitives = { path = "../../primitives/router", default-features = false } -snowbridge-beacon-primitives = { path = "../../primitives/beacon", default-features = false, optional = true } +snowbridge-beacon-primitives = { path = "../../primitives/beacon", default-features = false } +snowbridge-pallet-inbound-queue-fixtures = { path = "./fixtures", optional = true } [dev-dependencies] frame-benchmarking = { path = "../../../polkadot-sdk/substrate/frame/benchmarking" } sp-keyring = { path = "../../../polkadot-sdk/substrate/primitives/keyring" } -snowbridge-beacon-primitives = { path = "../../primitives/beacon" } -snowbridge-pallet-ethereum-client = { path = "../ethereum-client" } +snowbridge-pallet-ethereum-client = { path = "../../pallets/ethereum-client" } hex-literal = { version = "0.4.1" } [features] @@ -65,6 +65,7 @@ std = [ "pallet-balances/std", "scale-info/std", "serde", + "snowbridge-beacon-primitives/std", "snowbridge-core/std", "snowbridge-ethereum/std", "snowbridge-router-primitives/std", @@ -83,9 +84,9 @@ runtime-benchmarks = [ "frame-system/runtime-benchmarks", "hex-literal", "pallet-balances/runtime-benchmarks", - "snowbridge-beacon-primitives", "snowbridge-core/runtime-benchmarks", "snowbridge-pallet-ethereum-client/runtime-benchmarks", + "snowbridge-pallet-inbound-queue-fixtures/runtime-benchmarks", "snowbridge-router-primitives/runtime-benchmarks", "sp-runtime/runtime-benchmarks", "xcm-builder/runtime-benchmarks", diff --git a/parachain/pallets/inbound-queue/fixtures/Cargo.toml b/parachain/pallets/inbound-queue/fixtures/Cargo.toml new file mode 100644 index 0000000000..1f7dea7aa2 --- /dev/null +++ b/parachain/pallets/inbound-queue/fixtures/Cargo.toml @@ -0,0 +1,44 @@ +[package] +name = "snowbridge-pallet-inbound-queue-fixtures" +description = "Snowbridge Inbound Queue Test Fixtures" +version = "0.9.0" +authors = ["Snowfork "] +edition.workspace = true +repository.workspace = true +license = "Apache-2.0" +categories = ["cryptography::cryptocurrencies"] + +[lints] +workspace = true + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +hex-literal = { version = "0.4.1" } +sp-core = { path = "../../../../polkadot-sdk/substrate/primitives/core", default-features = false } +sp-std = { path = "../../../../polkadot-sdk/substrate/primitives/std", default-features = false } +frame-benchmarking = { path = "../../../../polkadot-sdk/substrate/frame/benchmarking", default-features = false, optional = true } +frame-support = { path = "../../../../polkadot-sdk/substrate/frame/support", default-features = false } +frame-system = { path = "../../../../polkadot-sdk/substrate/frame/system", default-features = false } +snowbridge-core = { path = "../../../primitives/core", default-features = false } +snowbridge-beacon-primitives = { path = "../../../primitives/beacon", default-features = false } + +[features] +default = ["std"] +std = [ + "frame-benchmarking/std", + "frame-support/std", + "frame-system/std", + "snowbridge-beacon-primitives/std", + "snowbridge-core/std", + "sp-core/std", + "sp-std/std", +] +runtime-benchmarks = [ + "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "snowbridge-core/runtime-benchmarks", +] diff --git a/parachain/pallets/inbound-queue/fixtures/src/lib.rs b/parachain/pallets/inbound-queue/fixtures/src/lib.rs new file mode 100644 index 0000000000..db336d339d --- /dev/null +++ b/parachain/pallets/inbound-queue/fixtures/src/lib.rs @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2023 Snowfork +#![cfg_attr(not(feature = "std"), no_std)] + +use snowbridge_beacon_primitives::CompactExecutionHeader; +use snowbridge_core::inbound::Message; +use sp_core::RuntimeDebug; + +pub mod register_token; +pub mod send_token; + +#[derive(Clone, RuntimeDebug)] +pub struct InboundQueueFixture { + pub execution_header: CompactExecutionHeader, + pub message: Message, +} diff --git a/parachain/pallets/inbound-queue/src/benchmarking/fixtures.rs b/parachain/pallets/inbound-queue/fixtures/src/register_token.rs similarity index 83% rename from parachain/pallets/inbound-queue/src/benchmarking/fixtures.rs rename to parachain/pallets/inbound-queue/fixtures/src/register_token.rs index 7031f88193..b8d510e6b1 100644 --- a/parachain/pallets/inbound-queue/src/benchmarking/fixtures.rs +++ b/parachain/pallets/inbound-queue/fixtures/src/register_token.rs @@ -1,21 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2023 Snowfork // Generated, do not edit! // See ethereum client README.md for instructions to generate + +use crate::InboundQueueFixture; use hex_literal::hex; use snowbridge_beacon_primitives::CompactExecutionHeader; use snowbridge_core::inbound::{Log, Message, Proof}; use sp_std::vec; -pub struct InboundQueueTest { - pub execution_header: CompactExecutionHeader, - pub message: Message, -} - -pub fn make_create_message() -> InboundQueueTest { - InboundQueueTest { +pub fn make_register_token_message() -> InboundQueueFixture { + InboundQueueFixture { execution_header: CompactExecutionHeader{ - parent_hash: hex!("d82ec63f5c5e6ba61d62f09c188f158e6449b94bdcc31941e68639eec3c4cf7a").into(), - block_number: 215, - state_root: hex!("8b65545fe5f3216b47b6339b9c91ca2b7f1032a970b04246d9e9fb4460ee34c3").into(), + parent_hash: hex!("d5de3dd02c96dbdc8aaa4db70a1e9fdab5ded5f4d52f18798acd56a3d37d1ad6").into(), + block_number: 772, + state_root: hex!("49cba2a79b23ad74cefe80c3a96699825d1cda0f75bfceb587c5549211c86245").into(), receipts_root: hex!("7b1f61b9714c080ef0be014e01657a15f45f0304b477beebc7ca5596c8033095").into(), }, message: Message { @@ -29,7 +28,7 @@ pub fn make_create_message() -> InboundQueueTest { data: hex!("00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002e00a736aa00000000000087d1f7fdfee7f651fabc8bfcb6e086c278b77a7d00e40b54020000000000000000000000000000000000000000000000000000000000").into(), }, proof: Proof { - block_hash: hex!("48498dbfbcfae53a7f4c289ee00747aceea925f6260c50ead5a33e1c55c40f98").into(), + block_hash: hex!("392182a385b3a417e8ddea8b252953ee81e6ec0fb09d9056c96c89fbeb703a3f").into(), tx_index: 0, data: (vec![ hex!("7b1f61b9714c080ef0be014e01657a15f45f0304b477beebc7ca5596c8033095").to_vec(), diff --git a/parachain/pallets/inbound-queue/fixtures/src/send_token.rs b/parachain/pallets/inbound-queue/fixtures/src/send_token.rs new file mode 100755 index 0000000000..2562217100 --- /dev/null +++ b/parachain/pallets/inbound-queue/fixtures/src/send_token.rs @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2023 Snowfork +// Generated, do not edit! +// See ethereum client README.md for instructions to generate + +use crate::InboundQueueFixture; +use hex_literal::hex; +use snowbridge_beacon_primitives::CompactExecutionHeader; +use snowbridge_core::inbound::{Log, Message, Proof}; +use sp_std::vec; + +pub fn make_send_token_message() -> InboundQueueFixture { + InboundQueueFixture { + execution_header: CompactExecutionHeader{ + parent_hash: hex!("920cecde45d428e3a77590b70f8533cf4c2c36917b8a7b74c915e7fa3dae7075").into(), + block_number: 1148, + state_root: hex!("bbc6ba0e9940d641afecbbaf3f97abd2b9ffaf2f6bd4879c4a71e659eca89978").into(), + receipts_root: hex!("9f3340b57eddc1f86de30776db57faeca80269a3dd459031741988dec240ce34").into(), + }, + message: Message { + event_log: Log { + address: hex!("eda338e4dc46038493b885327842fd3e301cab39").into(), + topics: vec![ + hex!("7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f").into(), + hex!("c173fac324158e77fb5840738a1a541f633cbec8884c6a601c567d2b376a0539").into(), + hex!("c8eaf22f2cb07bac4679df0a660e7115ed87fcfd4e32ac269f6540265bbbd26f").into(), + ], + data: hex!("00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005f00a736aa00000000000187d1f7fdfee7f651fabc8bfcb6e086c278b77a7d008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48000064a7b3b6e00d000000000000000000e40b5402000000000000000000000000").into(), + }, + proof: Proof { + block_hash: hex!("d3c155f123c3cbff22f3d7869283e02179edea9ffa7a5e9a4d8414c2a6b8991f").into(), + tx_index: 0, + data: (vec![ + hex!("9f3340b57eddc1f86de30776db57faeca80269a3dd459031741988dec240ce34").to_vec(), + ], vec![ + hex!("f90451822080b9044b02f90447018301bcb9b9010000800000000000000000000020000000000000000000004000000000000000000400000000000000000000001000000010000000000000000000000008000000200000000000000001000008000000000000000000000000000000008000080000000000200000000000000000000000000100000000000000000011000000000000020200000000000000000000000000003000000040080008000000000000000000040044000021000000002000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200800000000000f9033cf89b9487d1f7fdfee7f651fabc8bfcb6e086c278b77a7df863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa000000000000000000000000090a987b944cb1dcce5564e5fdecd7a54d3de27fea000000000000000000000000057a2d4ff0c3866d96556884bf09fecdd7ccd530ca00000000000000000000000000000000000000000000000000de0b6b3a7640000f9015d94eda338e4dc46038493b885327842fd3e301cab39f884a024c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e9a000000000000000000000000090a987b944cb1dcce5564e5fdecd7a54d3de27fea000000000000000000000000087d1f7fdfee7f651fabc8bfcb6e086c278b77a7da000000000000000000000000000000000000000000000000000000000000003e8b8c000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000208eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48f9013c94eda338e4dc46038493b885327842fd3e301cab39f863a07153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84fa0c173fac324158e77fb5840738a1a541f633cbec8884c6a601c567d2b376a0539a0c8eaf22f2cb07bac4679df0a660e7115ed87fcfd4e32ac269f6540265bbbd26fb8c000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005f00a736aa00000000000187d1f7fdfee7f651fabc8bfcb6e086c278b77a7d008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48000064a7b3b6e00d000000000000000000e40b5402000000000000000000000000").to_vec(), + ]), + }, + }, + } +} diff --git a/parachain/pallets/inbound-queue/src/benchmarking/mod.rs b/parachain/pallets/inbound-queue/src/benchmarking/mod.rs index c10de9dff2..931befa2ac 100644 --- a/parachain/pallets/inbound-queue/src/benchmarking/mod.rs +++ b/parachain/pallets/inbound-queue/src/benchmarking/mod.rs @@ -1,5 +1,3 @@ -mod fixtures; - // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork use super::*; @@ -8,17 +6,17 @@ use crate::Pallet as InboundQueue; use frame_benchmarking::v2::*; use frame_support::assert_ok; use frame_system::RawOrigin; +use snowbridge_pallet_inbound_queue_fixtures::register_token::make_register_token_message; #[benchmarks] mod benchmarks { use super::*; - use crate::benchmarking::fixtures::make_create_message; #[benchmark] fn submit() -> Result<(), BenchmarkError> { let caller: T::AccountId = whitelisted_caller(); - let create_message = make_create_message(); + let create_message = make_register_token_message(); T::Helper::initialize_storage( create_message.message.proof.block_hash, diff --git a/parachain/templates/register_token.mustache b/parachain/templates/register_token.mustache new file mode 100644 index 0000000000..e8d35be42e --- /dev/null +++ b/parachain/templates/register_token.mustache @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2023 Snowfork +// Generated, do not edit! +// See ethereum client README.md for instructions to generate + +use crate::InboundQueueFixture; +use hex_literal::hex; +use snowbridge_beacon_primitives::CompactExecutionHeader; +use snowbridge_core::inbound::{Log, Message, Proof}; +use sp_std::vec; + +pub fn make_register_token_message() -> InboundQueueFixture { + InboundQueueFixture { + execution_header: CompactExecutionHeader{ + parent_hash: hex!("{{InboundMessageTest.ExecutionHeader.ParentHash}}").into(), + block_number: {{InboundMessageTest.ExecutionHeader.BlockNumber}}, + state_root: hex!("{{InboundMessageTest.ExecutionHeader.StateRoot}}").into(), + receipts_root: hex!("{{InboundMessageTest.ExecutionHeader.ReceiptsRoot}}").into(), + }, + message: Message { + event_log: Log { + address: hex!("{{InboundMessageTest.Message.EventLog.Address}}").into(), + topics: vec![ + {{#InboundMessageTest.Message.EventLog.Topics}} + hex!("{{.}}").into(), + {{/InboundMessageTest.Message.EventLog.Topics}} + ], + data: hex!("{{InboundMessageTest.Message.EventLog.Data}}").into(), + }, + proof: Proof { + block_hash: hex!("{{InboundMessageTest.Message.Proof.BlockHash}}").into(), + tx_index: {{InboundMessageTest.Message.Proof.TxIndex}}, + data: (vec![ + {{#InboundMessageTest.Message.Proof.Data.Keys}} + hex!("{{.}}").to_vec(), + {{/InboundMessageTest.Message.Proof.Data.Keys}} + ], vec![ + {{#InboundMessageTest.Message.Proof.Data.Values}} + hex!("{{.}}").to_vec(), + {{/InboundMessageTest.Message.Proof.Data.Values}} + ]), + }, + }, + } +} diff --git a/parachain/templates/inbound-fixtures.mustache b/parachain/templates/send_token.mustache similarity index 89% rename from parachain/templates/inbound-fixtures.mustache rename to parachain/templates/send_token.mustache index 6dd8b81af5..e104d2da27 100644 --- a/parachain/templates/inbound-fixtures.mustache +++ b/parachain/templates/send_token.mustache @@ -1,17 +1,16 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2023 Snowfork // Generated, do not edit! // See ethereum client README.md for instructions to generate + +use crate::InboundQueueFixture; use hex_literal::hex; use snowbridge_beacon_primitives::CompactExecutionHeader; use snowbridge_core::inbound::{Log, Message, Proof}; use sp_std::vec; -pub struct InboundQueueTest { - pub execution_header: CompactExecutionHeader, - pub message: Message, -} - -pub fn make_create_message() -> InboundQueueTest { - InboundQueueTest { +pub fn make_send_token_message() -> InboundQueueFixture { + InboundQueueFixture { execution_header: CompactExecutionHeader{ parent_hash: hex!("{{InboundMessageTest.ExecutionHeader.ParentHash}}").into(), block_number: {{InboundMessageTest.ExecutionHeader.BlockNumber}}, diff --git a/polkadot-sdk b/polkadot-sdk index b4f833988f..e151ad11dd 160000 --- a/polkadot-sdk +++ b/polkadot-sdk @@ -1 +1 @@ -Subproject commit b4f833988f50f9ce1b4e89e807e46b65187cddb2 +Subproject commit e151ad11dd41a897b728b361a9e3d225d8661fe9 diff --git a/relayer/chain/ethereum/message.go b/relayer/chain/ethereum/message.go index c5cb126097..c1356a5087 100644 --- a/relayer/chain/ethereum/message.go +++ b/relayer/chain/ethereum/message.go @@ -54,9 +54,10 @@ func MakeMessageFromEvent(event *etypes.Log, receiptsTrie *etrie.Trie) (*paracha } log.WithFields(logrus.Fields{ - "EventLog": m.EventLog, - "Proof": m.Proof, - "txHash": event.TxHash.Hex(), + "EventLog": m.EventLog, + "Proof": m.Proof, + "txHash": event.TxHash.Hex(), + "BlockNumber": event.BlockNumber, }).Debug("Generated message from Ethereum log") return &m, nil diff --git a/relayer/cmd/generate_beacon_data.go b/relayer/cmd/generate_beacon_data.go index f2ecdff035..a7fb6ded13 100644 --- a/relayer/cmd/generate_beacon_data.go +++ b/relayer/cmd/generate_beacon_data.go @@ -39,6 +39,8 @@ func generateBeaconDataCmd() *cobra.Command { cmd.Flags().String("url", "http://127.0.0.1:9596", "Beacon URL") cmd.Flags().Bool("wait_until_next_period", true, "Waiting until next period") + cmd.Flags().Uint32("nonce", 1, "Nonce of the inbound message") + cmd.Flags().String("test_case", "register_token", "Inbound test case") return cmd } @@ -83,11 +85,11 @@ type InboundMessageTest struct { } const ( - pathToBeaconBenchmarkData = "parachain/pallets/ethereum-client/src/benchmarking" - pathToInboundQueueBenchmarkData = "parachain/pallets/inbound-queue/src/benchmarking" - pathToBenchmarkDataTemplate = "parachain/templates/benchmarking-fixtures.mustache" - pathToInboundBenchmarkDataTemplate = "parachain/templates/inbound-fixtures.mustache" - pathToBeaconTestFixtureFiles = "parachain/pallets/ethereum-client/tests/fixtures" + pathToBeaconBenchmarkData = "parachain/pallets/ethereum-client/src/benchmarking/fixtures.rs" + pathToBenchmarkDataTemplate = "parachain/templates/benchmarking-fixtures.mustache" + pathToBeaconTestFixtureFiles = "parachain/pallets/ethereum-client/tests/fixtures" + pathToInboundQueueFixtureTemplate = "parachain/templates/%s.mustache" + pathToInboundQueueFixtureData = "parachain/pallets/inbound-queue/fixtures/src/%s.rs" ) // Only print the hex encoded call as output of this command @@ -113,7 +115,10 @@ func generateBeaconCheckpoint(cmd *cobra.Command, _ []string) error { if err != nil { return fmt.Errorf("get initial sync: %w", err) } - exportJson, err := cmd.Flags().GetBool("export-json") + exportJson, err := cmd.Flags().GetBool("export_json") + if err != nil { + return err + } if exportJson { initialSync := checkPointScale.ToJSON() err = writeJSONToFile(initialSync, "dump-initial-checkpoint.json") @@ -137,15 +142,18 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { err := func() error { ctx := context.Background() - endpoint, _ := cmd.Flags().GetString("url") + endpoint, err := cmd.Flags().GetString("url") + if err != nil { + return err + } viper.SetConfigFile("web/packages/test/config/beacon-relay.json") - if err := viper.ReadInConfig(); err != nil { + if err = viper.ReadInConfig(); err != nil { return err } var conf beaconConf.Config - err := viper.Unmarshal(&conf) + err = viper.Unmarshal(&conf) if err != nil { return err } @@ -155,7 +163,7 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { viper.SetConfigFile("/tmp/snowbridge/execution-relay-asset-hub.json") - if err := viper.ReadInConfig(); err != nil { + if err = viper.ReadInConfig(); err != nil { return err } @@ -184,7 +192,10 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { return fmt.Errorf("get initial sync: %w", err) } initialSync := initialSyncScale.ToJSON() - writeJSONToFile(initialSync, fmt.Sprintf("%s/%s", pathToBeaconTestFixtureFiles, "initial-checkpoint.json")) + err = writeJSONToFile(initialSync, fmt.Sprintf("%s/%s", pathToBeaconTestFixtureFiles, "initial-checkpoint.json")) + if err != nil { + return err + } initialSyncHeaderSlot := initialSync.Header.Slot initialSyncPeriod := s.ComputeSyncPeriodAtSlot(initialSyncHeaderSlot) initialEpoch := s.ComputeEpochAtSlot(initialSyncHeaderSlot) @@ -199,7 +210,10 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { return fmt.Errorf("get sync committee update: %w", err) } syncCommitteeUpdate := syncCommitteeUpdateScale.Payload.ToJSON() - writeJSONToFile(syncCommitteeUpdate, fmt.Sprintf("%s/%s", pathToBeaconTestFixtureFiles, "sync-committee-update.json")) + err = writeJSONToFile(syncCommitteeUpdate, fmt.Sprintf("%s/%s", pathToBeaconTestFixtureFiles, "sync-committee-update.json")) + if err != nil { + return err + } log.Info("created sync committee update file") // get inbound message data @@ -210,20 +224,31 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { return err } - event, err := getEthereumEvent(ctx, gatewayContract, channelID) + nonce, err := cmd.Flags().GetUint32("nonce") + if err != nil { + return err + } + + event, err := getEthereumEvent(ctx, gatewayContract, channelID, nonce) if err != nil { return err } receiptTrie, err := headerCache.GetReceiptTrie(ctx, event.Raw.BlockHash) + if err != nil { + return err + } inboundMessage, err := ethereum.MakeMessageFromEvent(&event.Raw, receiptTrie) + if err != nil { + return err + } messageBlockNumber := event.Raw.BlockNumber log.WithFields(log.Fields{ "message": inboundMessage, "blockHash": event.Raw.BlockHash.Hex(), "blockNumber": messageBlockNumber, - }).WithError(err).Error("event is at block") + }).Info("event is at block") finalizedUpdateAfterMessage, err := getFinalizedUpdate(*s, messageBlockNumber) if err != nil { @@ -237,7 +262,7 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { return fmt.Errorf("get beacon block containing header: %w", err) } - beaconBlockSlot, err := strconv.ParseUint(beaconBlock.Data.Message.Body.ExecutionPayload.BlockNumber, 10, 64) + beaconBlockSlot, err := strconv.ParseUint(beaconBlock.Data.Message.Slot, 10, 64) if err != nil { return err } @@ -249,7 +274,7 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { "slot": beaconBlock.Data.Message.Slot, "blockHash": beaconBlock.Data.Message.Body.ExecutionPayload.BlockHash, "blockNumber": blockNumber, - }).WithError(err).Error("found execution header containing event") + }).WithError(err).Info("found execution header containing event") } checkPoint := cache.Proof{ @@ -335,8 +360,6 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { InboundMessageTest: inboundMessageTest, } - filename := fmt.Sprintf("fixtures.rs") - // writing beacon fixtures rendered, err := mustache.RenderFile(pathToBenchmarkDataTemplate, data) if err != nil { @@ -345,26 +368,34 @@ func generateBeaconTestFixture(cmd *cobra.Command, _ []string) error { log.WithFields(log.Fields{ "location": pathToBeaconBenchmarkData, - "filename": filename, }).Info("writing result file") - err = writeBenchmarkDataFile(fmt.Sprintf("%s/%s", pathToBeaconBenchmarkData, filename), rendered) + err = writeBenchmarkDataFile(fmt.Sprintf("%s", pathToBeaconBenchmarkData), rendered) if err != nil { return err } // writing inbound queue fixtures - rendered, err = mustache.RenderFile(pathToInboundBenchmarkDataTemplate, data) + testCase, err := cmd.Flags().GetString("test_case") + if err != nil { + return err + } + if testCase != "register_token" || testCase != "send_token" { + return fmt.Errorf("invalid test case: %s", testCase) + } + pathToInboundQueueFixtureTemplate := fmt.Sprintf(pathToInboundQueueFixtureTemplate, testCase) + pathToInboundQueueFixtureData := fmt.Sprintf(pathToInboundQueueFixtureData, testCase) + + rendered, err = mustache.RenderFile(pathToInboundQueueFixtureTemplate, data) if err != nil { return fmt.Errorf("render inbound queue benchmark fixture: %w", err) } log.WithFields(log.Fields{ - "location": pathToInboundQueueBenchmarkData, - "filename": filename, + "location": pathToInboundQueueFixtureData, }).Info("writing result file") - err = writeBenchmarkDataFile(fmt.Sprintf("%s/%s", pathToInboundQueueBenchmarkData, filename), rendered) + err = writeBenchmarkDataFile(fmt.Sprintf("%s", pathToInboundQueueFixtureData), rendered) if err != nil { return err } @@ -484,7 +515,10 @@ func generateExecutionUpdate(cmd *cobra.Command, _ []string) error { return fmt.Errorf("get header update: %w", err) } headerUpdate := headerUpdateScale.ToJSON() - writeJSONToFile(headerUpdate, "tmp/snowbridge/execution-header-update.json") + err = writeJSONToFile(headerUpdate, "tmp/snowbridge/execution-header-update.json") + if err != nil { + return err + } log.Info("created execution update file") return nil @@ -501,7 +535,7 @@ func generateInboundTestFixture(ctx context.Context, beaconEndpoint string) erro return nil } -func getEthereumEvent(ctx context.Context, gatewayContract *contracts.Gateway, channelID executionConf.ChannelID) (*contracts.GatewayOutboundMessageAccepted, error) { +func getEthereumEvent(ctx context.Context, gatewayContract *contracts.Gateway, channelID executionConf.ChannelID, nonce uint32) (*contracts.GatewayOutboundMessageAccepted, error) { maxBlockNumber := uint64(10000) opts := bind.FilterOpts{ @@ -529,7 +563,7 @@ func getEthereumEvent(ctx context.Context, gatewayContract *contracts.Gateway, c } break } - if iter.Event.Nonce >= 1 { + if iter.Event.Nonce >= uint64(nonce) { event = iter.Event iter.Close() break diff --git a/smoketest/Cargo.lock b/smoketest/Cargo.lock index 06124bb292..e0093d256b 100644 --- a/smoketest/Cargo.lock +++ b/smoketest/Cargo.lock @@ -109,6 +109,12 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" +[[package]] +name = "array-bytes" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0" + [[package]] name = "array-init" version = "0.0.4" @@ -153,7 +159,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -681,7 +687,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -698,7 +704,7 @@ checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -1110,7 +1116,7 @@ dependencies = [ "regex", "serde", "serde_json", - "syn 2.0.41", + "syn 2.0.48", "toml", "walkdir", ] @@ -1127,7 +1133,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -1152,7 +1158,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.41", + "syn 2.0.48", "tempfile", "thiserror", "tiny-keccak", @@ -1412,7 +1418,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -2319,7 +2325,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -2515,7 +2521,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -2553,7 +2559,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9825a04601d60621feed79c4e6b56d65db77cdca55cef43b46b0de1096d1c282" dependencies = [ "proc-macro2", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -2606,9 +2612,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -2624,9 +2630,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -2749,7 +2755,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -3229,9 +3235,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] @@ -3249,13 +3255,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -3499,7 +3505,7 @@ version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c96dc3debbe5c22ebf18f99e6a53199efe748e6e584a1902adb88cbad66ae7c" dependencies = [ - "array-bytes", + "array-bytes 4.2.0", "base58", "bitflags", "blake2", @@ -3569,7 +3575,7 @@ version = "8.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -3861,6 +3867,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" name = "staging-xcm" version = "1.0.0" dependencies = [ + "array-bytes 6.2.2", "bounded-collections", "derivative", "environmental", @@ -3904,7 +3911,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -4013,9 +4020,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.41" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -4073,7 +4080,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -4154,7 +4161,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -5018,7 +5025,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -5044,5 +5051,5 @@ checksum = "25588073e5216b50bca71d61cb8595cdb9745e87032a58c199730def2862c934" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] diff --git a/smoketest/src/constants.rs b/smoketest/src/constants.rs index 761be9a8bb..896f0964cb 100644 --- a/smoketest/src/constants.rs +++ b/smoketest/src/constants.rs @@ -46,6 +46,8 @@ pub const PENPAL_SOVEREIGN: [u8; 32] = pub const FERDIE: [u8; 32] = hex!("1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c"); +pub const BOB: [u8; 32] = hex!("8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48"); + lazy_static! { pub static ref REGISTER_TOKEN_FEE: u64 = env::var("REGISTER_TOKEN_FEE") .unwrap_or("200000000000000000".to_string()) diff --git a/smoketest/src/helper.rs b/smoketest/src/helper.rs index 61393f42ac..d47067c3db 100644 --- a/smoketest/src/helper.rs +++ b/smoketest/src/helper.rs @@ -4,7 +4,7 @@ use crate::{ parachains::{ bridgehub::{self, api::runtime_types::snowbridge_core::outbound::v1::OperatingMode}, penpal::{ - api::runtime_types as penpalTypes, + api::{runtime_types as penpalTypes, runtime_types::xcm::VersionedLocation}, {self}, }, relaychain, @@ -43,7 +43,7 @@ use penpalTypes::{ staging_xcm::v3::multilocation::MultiLocation, xcm::{ v3::{junction::Junction, junctions::Junctions}, - VersionedMultiLocation, VersionedXcm, + VersionedXcm, }, }; use sp_core::{sr25519::Pair, Pair as PairT, H160}; @@ -184,7 +184,7 @@ pub async fn send_sudo_xcm_transact( penpal_client: &Box>, message: Box, ) -> Result, Box> { - let dest = Box::new(VersionedMultiLocation::V3(MultiLocation { + let dest = Box::new(VersionedLocation::V3(MultiLocation { parents: 1, interior: Junctions::X1(Junction::Parachain(BRIDGE_HUB_PARA_ID)), })); diff --git a/smoketest/tests/register_token.rs b/smoketest/tests/register_token.rs index 77c58df800..d815350995 100644 --- a/smoketest/tests/register_token.rs +++ b/smoketest/tests/register_token.rs @@ -45,7 +45,11 @@ async fn register_token() { .unwrap() .unwrap(); - println!("receipt transaction hash: {:#?}", hex::encode(receipt.transaction_hash)); + println!( + "receipt transaction hash: {:#?}, transaction block: {:#?}", + hex::encode(receipt.transaction_hash), + receipt.block_number + ); // Log for OutboundMessageAccepted let outbound_message_accepted_log = receipt.logs.last().unwrap(); diff --git a/smoketest/tests/send_token.rs b/smoketest/tests/send_token.rs index f96f663459..190c7ef424 100644 --- a/smoketest/tests/send_token.rs +++ b/smoketest/tests/send_token.rs @@ -64,7 +64,7 @@ async fn send_token() { .send_token( weth.address(), ASSET_HUB_PARA_ID, - i_gateway::MultiAddress { kind: 1, data: FERDIE.into() }, + i_gateway::MultiAddress { kind: 1, data: BOB.into() }, destination_fee, amount, ) @@ -76,7 +76,11 @@ async fn send_token() { .unwrap() .unwrap(); - println!("receipt transaction hash: {:#?}", hex::encode(receipt.transaction_hash)); + println!( + "receipt transaction hash: {:#?}, transaction block: {:#?}", + hex::encode(receipt.transaction_hash), + receipt.block_number + ); // Log for OutboundMessageAccepted let outbound_message_accepted_log = receipt.logs.last().unwrap(); @@ -101,7 +105,7 @@ async fn send_token() { AccountKey20 { network: None, key: WETH_CONTRACT.into() }, ), }; - let expected_owner: AccountId32 = FERDIE.into(); + let expected_owner: AccountId32 = BOB.into(); let mut issued_event_found = false; while let Some(Ok(block)) = blocks.next().await { diff --git a/web/packages/test/scripts/build-binary.sh b/web/packages/test/scripts/build-binary.sh index c918232c0d..2c7e10ffcb 100755 --- a/web/packages/test/scripts/build-binary.sh +++ b/web/packages/test/scripts/build-binary.sh @@ -70,14 +70,16 @@ set_slot_time() { } build_lodestar() { - pushd $root_dir/lodestar - if [ "$eth_fast_mode" == "true" ]; then - set_slot_time 1 - else - set_slot_time 12 + if [ "$rebuild_lodestar" == "true" ]; then + pushd $root_dir/lodestar + if [ "$eth_fast_mode" == "true" ]; then + set_slot_time 1 + else + set_slot_time 12 + fi + yarn install && yarn run build + popd fi - yarn install && yarn run build - popd } install_binary() { diff --git a/web/packages/test/scripts/set-env.sh b/web/packages/test/scripts/set-env.sh index 4c46a01069..2291d2b6eb 100755 --- a/web/packages/test/scripts/set-env.sh +++ b/web/packages/test/scripts/set-env.sh @@ -20,6 +20,7 @@ eth_gas_limit="${ETH_GAS_LIMIT:-5000000}" eth_chain_id="${ETH_NETWORK_ID:-15}" eth_fast_mode="${ETH_FAST_MODE:-true}" etherscan_api_key="${ETHERSCAN_API_KEY:-}" +rebuild_lodestar="${REBUILD_LODESTAR:-true}" parachain_relay_eth_key="${PARACHAIN_RELAY_ETH_KEY:-0x8013383de6e5a891e7754ae1ef5a21e7661f1fe67cd47ca8ebf4acd6de66879a}" beefy_relay_eth_key="${BEEFY_RELAY_ETH_KEY:-0x935b65c833ced92c43ef9de6bff30703d941bd92a2637cb00cfad389f5862109}"