diff --git a/parachain/Cargo.lock b/parachain/Cargo.lock index 9b0d03dbe2..2f6fcdddff 100644 --- a/parachain/Cargo.lock +++ b/parachain/Cargo.lock @@ -3767,6 +3767,7 @@ dependencies = [ "sp-runtime", "sp-std 8.0.0", "staging-xcm", + "staging-xcm-builder", ] [[package]] diff --git a/parachain/pallets/control/src/lib.rs b/parachain/pallets/control/src/lib.rs index 0209a14b6f..b326a9d4c7 100644 --- a/parachain/pallets/control/src/lib.rs +++ b/parachain/pallets/control/src/lib.rs @@ -68,7 +68,7 @@ use frame_system::pallet_prelude::*; use snowbridge_core::{ outbound::{Command, Initializer, Message, OperatingMode, SendError, SendMessage}, sibling_sovereign_account, AgentId, Channel, ChannelId, ChannelLookup, ParaId, - BRIDGE_HUB_AGENT_ID, PRIMARY_GOVERNANCE_CHANNEL, SECONDARY_GOVERNANCE_CHANNEL, + PRIMARY_GOVERNANCE_CHANNEL, SECONDARY_GOVERNANCE_CHANNEL, }; #[cfg(feature = "runtime-benchmarks")] @@ -210,19 +210,21 @@ pub mod pallet { #[pallet::genesis_build] impl BuildGenesisConfig for GenesisConfig { fn build(&self) { + let bridge_hub_agent_id = + agent_id_of::(&MultiLocation::here()).expect("infallible; qed"); // Agent for BridgeHub - Agents::::insert(BRIDGE_HUB_AGENT_ID, ()); + Agents::::insert(bridge_hub_agent_id, ()); // Primary governance channel Channels::::insert( PRIMARY_GOVERNANCE_CHANNEL, - Channel { agent_id: BRIDGE_HUB_AGENT_ID, para_id: self.para_id }, + Channel { agent_id: bridge_hub_agent_id, para_id: self.para_id }, ); // Secondary governance channel Channels::::insert( SECONDARY_GOVERNANCE_CHANNEL, - Channel { agent_id: BRIDGE_HUB_AGENT_ID, para_id: self.para_id }, + Channel { agent_id: bridge_hub_agent_id, para_id: self.para_id }, ); // Asset Hub diff --git a/parachain/pallets/control/src/mock.rs b/parachain/pallets/control/src/mock.rs index df8dbcfaae..96a6f3cff4 100644 --- a/parachain/pallets/control/src/mock.rs +++ b/parachain/pallets/control/src/mock.rs @@ -11,7 +11,8 @@ use sp_core::H256; use xcm_executor::traits::ConvertLocation; use snowbridge_core::{ - outbound::ConstantGasMeter, sibling_sovereign_account, AgentId, AllowSiblingsOnly, ParaId, + outbound::ConstantGasMeter, sibling_sovereign_account, AgentId, AllowSiblingsOnly, + DescribeHere, ParaId, }; use sp_runtime::{ traits::{AccountIdConversion, BlakeTwo256, IdentityLookup, Keccak256}, @@ -208,7 +209,8 @@ impl crate::Config for Test { type RuntimeEvent = RuntimeEvent; type OutboundQueue = OutboundQueue; type SiblingOrigin = pallet_xcm_origin::EnsureXcm; - type AgentIdOf = HashedDescription>; + type AgentIdOf = + HashedDescription)>; type TreasuryAccount = TreasuryAccount; type Token = Balances; type WeightInfo = (); @@ -249,6 +251,6 @@ pub fn make_xcm_origin(location: MultiLocation) -> RuntimeOrigin { } pub fn make_agent_id(location: MultiLocation) -> AgentId { - HashedDescription::>::convert_location(&location) + ::AgentIdOf::convert_location(&location) .expect("convert location") } diff --git a/parachain/pallets/control/src/tests.rs b/parachain/pallets/control/src/tests.rs index e4685219b5..bfd7c5180c 100644 --- a/parachain/pallets/control/src/tests.rs +++ b/parachain/pallets/control/src/tests.rs @@ -2,6 +2,7 @@ // SPDX-FileCopyrightText: 2023 Snowfork use crate::{mock::*, *}; use frame_support::{assert_noop, assert_ok}; +use hex_literal::hex; use snowbridge_core::sibling_sovereign_account_raw; use sp_core::H256; use sp_runtime::{AccountId32, DispatchError::BadOrigin, TokenError}; @@ -26,6 +27,18 @@ fn create_agent() { }); } +#[test] +fn test_agent_for_here() { + new_test_ext().execute_with(|| { + let origin_location = MultiLocation::here(); + let agent_id = make_agent_id(origin_location); + assert_eq!( + agent_id, + hex!("03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314").into(), + ) + }); +} + #[test] fn create_agent_fails_on_funds_unavailable() { new_test_ext().execute_with(|| { diff --git a/parachain/pallets/ethereum-beacon-client/Cargo.toml b/parachain/pallets/ethereum-beacon-client/Cargo.toml index f4318a293c..7effb65f82 100644 --- a/parachain/pallets/ethereum-beacon-client/Cargo.toml +++ b/parachain/pallets/ethereum-beacon-client/Cargo.toml @@ -82,6 +82,7 @@ runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", - "hex-literal" + "hex-literal", + "snowbridge-core/runtime-benchmarks", ] beacon-spec-mainnet = [] diff --git a/parachain/primitives/core/Cargo.toml b/parachain/primitives/core/Cargo.toml index f2cbaa2a7b..fd5747613b 100644 --- a/parachain/primitives/core/Cargo.toml +++ b/parachain/primitives/core/Cargo.toml @@ -12,6 +12,7 @@ hex-literal = { version = "0.4.1" } polkadot-parachain-primitives = { path = "../../../polkadot-sdk/polkadot/parachain", default-features = false } xcm = { package = "staging-xcm", path = "../../../polkadot-sdk/polkadot/xcm", default-features = false } +xcm-builder = { package = "staging-xcm-builder", path = "../../../polkadot-sdk/polkadot/xcm/xcm-builder", default-features = false } frame-support = { path = "../../../polkadot-sdk/substrate/frame/support", default-features = false } frame-system = { path = "../../../polkadot-sdk/substrate/frame/system", default-features = false } @@ -44,6 +45,9 @@ std = [ "snowbridge-beacon-primitives/std", "xcm/std", "ethabi/std", + "xcm-builder/std", ] serde = ["dep:serde", "scale-info/serde"] -runtime-benchmarks = [] +runtime-benchmarks = [ + "xcm-builder/runtime-benchmarks", +] diff --git a/parachain/primitives/core/src/lib.rs b/parachain/primitives/core/src/lib.rs index a07fef34be..b0e3e6007f 100644 --- a/parachain/primitives/core/src/lib.rs +++ b/parachain/primitives/core/src/lib.rs @@ -26,7 +26,12 @@ use sp_core::H256; use sp_io::hashing::keccak_256; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; use sp_std::prelude::*; -use xcm::prelude::{Junction::Parachain, Junctions::X1, MultiLocation}; +use xcm::prelude::{ + Junction::Parachain, + Junctions::{Here, X1}, + MultiLocation, +}; +use xcm_builder::DescribeLocation; /// The ID of an agent contract pub type AgentId = H256; @@ -135,6 +140,12 @@ pub const PRIMARY_GOVERNANCE_CHANNEL: ChannelId = pub const SECONDARY_GOVERNANCE_CHANNEL: ChannelId = ChannelId::new(hex!("0000000000000000000000000000000000000000000000000000000000000002")); -/// Agent ID for BridgeHub -pub const BRIDGE_HUB_AGENT_ID: AgentId = - H256(hex!("0000000000000000000000000000000000000000000000000000000000000001")); +pub struct DescribeHere; +impl DescribeLocation for DescribeHere { + fn describe_location(l: &MultiLocation) -> Option> { + match (l.parents, l.interior) { + (0, Here) => Some(Vec::::new().encode()), + _ => None, + } + } +} diff --git a/polkadot-sdk b/polkadot-sdk index 6d1d270b65..4769ac16c7 160000 --- a/polkadot-sdk +++ b/polkadot-sdk @@ -1 +1 @@ -Subproject commit 6d1d270b653227585d5bbcc15c9faecf692c06a0 +Subproject commit 4769ac16c7e6639b4c41bc642594dfdfad2125a7 diff --git a/smoketest/src/constants.rs b/smoketest/src/constants.rs index 846b8be005..5263c9f80c 100644 --- a/smoketest/src/constants.rs +++ b/smoketest/src/constants.rs @@ -1,5 +1,6 @@ use hex_literal::hex; +// Todo: load all configs from env in consistent with set-env.sh pub const ASSET_HUB_PARA_ID: u32 = 1000; pub const BRIDGE_HUB_PARA_ID: u32 = 1013; pub const PENPAL_PARA_ID: u32 = 2000; @@ -24,7 +25,7 @@ pub const WETH_CONTRACT: [u8; 20] = hex!("87d1f7fdfEe7f651FaBc8bFCB6E086C278b77A // Agent for bridge hub parachain 1013 pub const BRIDGE_HUB_AGENT_ID: [u8; 32] = - hex!("05f0ced792884ed09997292bd95f8d0d1094bb3bded91ec3f2f08531624037d6"); + hex!("03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314"); // Agent for asset hub parachain 1000 pub const ASSET_HUB_AGENT_ID: [u8; 32] = hex!("72456f48efed08af20e5b317abf8648ac66e86bb90a411d9b0b713f7364b75b4"); diff --git a/web/packages/test/scripts/set-env.sh b/web/packages/test/scripts/set-env.sh index b6c80bfe35..500033831a 100755 --- a/web/packages/test/scripts/set-env.sh +++ b/web/packages/test/scripts/set-env.sh @@ -36,7 +36,7 @@ bridgehub_ws_url="${BRIDGE_HUB_WS_URL:-ws://127.0.0.1:11144}" bridgehub_seed="${BRIDGE_HUB_SEED:-//Alice}" bridgehub_pallets_owner="${BRIDGE_HUB_PALLETS_OWNER:-0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d}" export BRIDGE_HUB_PARAID="${BRIDGE_HUB_PARAID:-1013}" -export BRIDGE_HUB_AGENT_ID="${BRIDGE_HUB_AGENT_ID:-0x0000000000000000000000000000000000000000000000000000000000000001}" +export BRIDGE_HUB_AGENT_ID="${BRIDGE_HUB_AGENT_ID:-0x03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314}" assethub_ws_url="${ASSET_HUB_WS_URL:-ws://127.0.0.1:12144}" assethub_seed="${ASSET_HUB_SEED:-//Alice}"