mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 08:07:58 +00:00
575b8f8d15
## Summary This pull request proposes a solution for improved control of the versioned XCM flow over the bridge (across different consensus chains) and resolves the situation where the sending chain/consensus has already migrated to a higher XCM version than the receiving chain/consensus. ## Problem/Motivation The current flow over the bridge involves a transfer from AssetHubRococo (AHR) to BridgeHubRococo (BHR) to BridgeHubWestend (BHW) and finally to AssetHubWestend (AHW), beginning with a reserve-backed transfer on AHR. In this process: 1. AHR sends XCM `ExportMessage` through `XcmpQueue`, incorporating XCM version checks using the `WrapVersion` feature, influenced by `pallet_xcm::SupportedVersion` (managed by `pallet_xcm::force_xcm_version` or version discovery). 2. BHR handles the `ExportMessage` instruction, utilizing the latest XCM version. The `HaulBlobExporter` converts the inner XCM to [`VersionedXcm::from`](https://github.com/paritytech/polkadot-sdk/blob/63ac2471aa0210f0ac9903bdd7d8f9351f9a635f/polkadot/xcm/xcm-builder/src/universal_exports.rs#L465-L467), also using the latest XCM version. However, challenges arise: - Incompatibility when BHW uses a different version than BHR. For instance, if BHR migrates to **XCMv4** while BHW remains on **XCMv3**, BHR's `VersionedXcm::from` uses `VersionedXcm::V4` variant, causing encoding issues for BHW. ``` /// Just a simulation of possible error, which could happen on BHW /// (this code is based on actual master without XCMv4) let encoded = hex_literal::hex!("0400"); println!("{:?}", VersionedXcm::<()>::decode(&mut &encoded[..])); Err(Error { cause: None, desc: "Could not decode `VersionedXcm`, variant doesn't exist" }) ``` - Similar compatibility issues exist between AHR and AHW. ## Solution This pull request introduces the following solutions: 1. **New trait `CheckVersion`** - added to the `xcm` module and exposing `pallet_xcm::SupportedVersion`. This enhancement allows checking the actual XCM version for desired destinations outside of the `pallet_xcm` module. 2. **Version Check in `HaulBlobExporter`** uses `CheckVersion` to check known/configured destination versions, ensuring compatibility. For example, in the scenario mentioned, BHR can store the version `3` for BHW. If BHR is on XCMv4, it will attempt to downgrade the message to version `3` instead of using the latest version `4`. 3. **Version Check in `pallet-xcm-bridge-hub-router`** - this check ensures compatibility with the real destination's XCM version, preventing the unnecessary sending of messages to the local bridge hub if versions are incompatible. These additions aim to improve the control and compatibility of XCM flows over the bridge and addressing issues related to version mismatches. ## Possible alternative solution _(More investigation is needed, and at the very least, it should extend to XCMv4/5. If this proves to be a viable option, I can open an RFC for XCM.)._ Add the `XcmVersion` attribute to the `ExportMessage` so that the sending chain can determine, based on what is stored in `pallet_xcm::SupportedVersion`, the version the destination is using. This way, we may not need to handle the version in `HaulBlobExporter`. ``` ExportMessage { network: NetworkId, destination: InteriorMultiLocation, xcm: Xcm<()> destination_xcm_version: Version, // <- new attritbute }, ``` ``` pub trait ExportXcm { fn validate( network: NetworkId, channel: u32, universal_source: &mut Option<InteriorMultiLocation>, destination: &mut Option<InteriorMultiLocation>, message: &mut Option<Xcm<()>>, destination_xcm_version: Version, , // <- new attritbute ) -> SendResult<Self::Ticket>; ``` ## Future Directions This PR does not fix version discovery over bridge, further investigation will be conducted here: https://github.com/paritytech/polkadot-sdk/issues/2417. ## TODO - [x] `pallet_xcm` mock for tests uses hard-coded XCM version `2` - change to 3 or lastest? - [x] fix `pallet-xcm-bridge-hub-router` - [x] fix HaulBlobExporter with version determination [here](https://github.com/paritytech/polkadot-sdk/blob/2183669d05f9b510f979a0cc3c7847707bacba2e/polkadot/xcm/xcm-builder/src/universal_exports.rs#L465) - [x] add unit-tests to the runtimes - [x] run benchmarks for `ExportMessage` - [x] extend local run scripts about `force_xcm_version(dest, version)` - [ ] when merged, prepare governance calls for Rococo/Westend - [ ] add PRDoc Part of: https://github.com/paritytech/parity-bridges-common/issues/2719 --------- Co-authored-by: command-bot <>
424 lines
17 KiB
Bash
Executable File
424 lines
17 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# import common functions
|
|
source "$(dirname "$0")"/bridges_common.sh
|
|
|
|
# Expected sovereign accounts.
|
|
#
|
|
# Generated by:
|
|
#
|
|
# #[test]
|
|
# fn generate_sovereign_accounts() {
|
|
# use sp_core::crypto::Ss58Codec;
|
|
# use polkadot_parachain_primitives::primitives::Sibling;
|
|
#
|
|
# parameter_types! {
|
|
# pub UniversalLocationAHR: InteriorMultiLocation = X2(GlobalConsensus(Rococo), Parachain(1000));
|
|
# pub UniversalLocationAHW: InteriorMultiLocation = X2(GlobalConsensus(Westend), Parachain(1000));
|
|
# }
|
|
#
|
|
# // SS58=42
|
|
# println!("GLOBAL_CONSENSUS_ROCOCO_SOVEREIGN_ACCOUNT=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# GlobalConsensusConvertsFor::<UniversalLocationAHW, [u8; 32]>::convert_location(
|
|
# &MultiLocation { parents: 2, interior: X1(GlobalConsensus(Rococo)) }).unwrap()
|
|
# ).to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
# println!("GLOBAL_CONSENSUS_ROCOCO_ASSET_HUB_ROCOCO_1000_SOVEREIGN_ACCOUNT=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# GlobalConsensusParachainConvertsFor::<UniversalLocationAHW, [u8; 32]>::convert_location(
|
|
# &MultiLocation { parents: 2, interior: X2(GlobalConsensus(Rococo), Parachain(1000)) }).unwrap()
|
|
# ).to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
# println!("ASSET_HUB_WESTEND_SOVEREIGN_ACCOUNT_AT_BRIDGE_HUB_WESTEND=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# SiblingParachainConvertsVia::<Sibling, [u8; 32]>::convert_location(
|
|
# &MultiLocation { parents: 1, interior: X1(Parachain(1000)) }).unwrap()
|
|
# ).to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
#
|
|
# // SS58=42
|
|
# println!("GLOBAL_CONSENSUS_WESTEND_SOVEREIGN_ACCOUNT=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# GlobalConsensusConvertsFor::<UniversalLocationAHR, [u8; 32]>::convert_location(
|
|
# &MultiLocation { parents: 2, interior: X1(GlobalConsensus(Westend)) }).unwrap()
|
|
# ).to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
# println!("GLOBAL_CONSENSUS_WESTEND_ASSET_HUB_WESTEND_1000_SOVEREIGN_ACCOUNT=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# GlobalConsensusParachainConvertsFor::<UniversalLocationAHR, [u8; 32]>::convert_location(
|
|
# &MultiLocation { parents: 2, interior: X2(GlobalConsensus(Westend), Parachain(1000)) }).unwrap()
|
|
# ).to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
# println!("ASSET_HUB_ROCOCO_SOVEREIGN_ACCOUNT_AT_BRIDGE_HUB_ROCOCO=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# SiblingParachainConvertsVia::<Sibling, [u8; 32]>::convert_location(
|
|
# &MultiLocation { parents: 1, interior: X1(Parachain(1000)) }).unwrap()
|
|
# ).to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
# }
|
|
GLOBAL_CONSENSUS_ROCOCO_SOVEREIGN_ACCOUNT="5GxRGwT8bU1JeBPTUXc7LEjZMxNrK8MyL2NJnkWFQJTQ4sii"
|
|
GLOBAL_CONSENSUS_ROCOCO_ASSET_HUB_ROCOCO_1000_SOVEREIGN_ACCOUNT="5CfNu7eH3SJvqqPt3aJh38T8dcFvhGzEohp9tsd41ANhXDnQ"
|
|
ASSET_HUB_WESTEND_SOVEREIGN_ACCOUNT_AT_BRIDGE_HUB_WESTEND="5Eg2fntNprdN3FgH4sfEaaZhYtddZQSQUqvYJ1f2mLtinVhV"
|
|
GLOBAL_CONSENSUS_WESTEND_SOVEREIGN_ACCOUNT="5He2Qdztyxxa4GoagY6q1jaiLMmKy1gXS7PdZkhfj8ZG9hk5"
|
|
GLOBAL_CONSENSUS_WESTEND_ASSET_HUB_WESTEND_1000_SOVEREIGN_ACCOUNT="5GUD9X494SnhfBTNReHwhV1599McpyVrAqFY6WnTfVQVYNUM"
|
|
ASSET_HUB_ROCOCO_SOVEREIGN_ACCOUNT_AT_BRIDGE_HUB_ROCOCO="5Eg2fntNprdN3FgH4sfEaaZhYtddZQSQUqvYJ1f2mLtinVhV"
|
|
|
|
# Expected sovereign accounts for rewards on BridgeHubs.
|
|
#
|
|
# Generated by:
|
|
# #[test]
|
|
# fn generate_sovereign_accounts_for_rewards() {
|
|
# use bp_messages::LaneId;
|
|
# use bp_relayers::{PayRewardFromAccount, RewardsAccountOwner, RewardsAccountParams};
|
|
# use sp_core::crypto::Ss58Codec;
|
|
#
|
|
# // SS58=42
|
|
# println!(
|
|
# "ON_BRIDGE_HUB_ROCOCO_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhwd_ThisChain=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# PayRewardFromAccount::<[u8; 32], [u8; 32]>::rewards_account(RewardsAccountParams::new(
|
|
# LaneId([0, 0, 0, 2]),
|
|
# *b"bhwd",
|
|
# RewardsAccountOwner::ThisChain
|
|
# ))
|
|
# )
|
|
# .to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
# // SS58=42
|
|
# println!(
|
|
# "ON_BRIDGE_HUB_ROCOCO_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhwd_BridgedChain=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# PayRewardFromAccount::<[u8; 32], [u8; 32]>::rewards_account(RewardsAccountParams::new(
|
|
# LaneId([0, 0, 0, 2]),
|
|
# *b"bhwd",
|
|
# RewardsAccountOwner::BridgedChain
|
|
# ))
|
|
# )
|
|
# .to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
#
|
|
# // SS58=42
|
|
# println!(
|
|
# "ON_BRIDGE_HUB_WESTEND_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhro_ThisChain=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# PayRewardFromAccount::<[u8; 32], [u8; 32]>::rewards_account(RewardsAccountParams::new(
|
|
# LaneId([0, 0, 0, 2]),
|
|
# *b"bhro",
|
|
# RewardsAccountOwner::ThisChain
|
|
# ))
|
|
# )
|
|
# .to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
# // SS58=42
|
|
# println!(
|
|
# "ON_BRIDGE_HUB_WESTEND_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhro_BridgedChain=\"{}\"",
|
|
# frame_support::sp_runtime::AccountId32::new(
|
|
# PayRewardFromAccount::<[u8; 32], [u8; 32]>::rewards_account(RewardsAccountParams::new(
|
|
# LaneId([0, 0, 0, 2]),
|
|
# *b"bhro",
|
|
# RewardsAccountOwner::BridgedChain
|
|
# ))
|
|
# )
|
|
# .to_ss58check_with_version(42_u16.into())
|
|
# );
|
|
# }
|
|
ON_BRIDGE_HUB_ROCOCO_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhwd_ThisChain="5EHnXaT5BhiSGP5hbdsoVGtzi2sQVgpDNToTxLYeQvKoMPEm"
|
|
ON_BRIDGE_HUB_ROCOCO_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhwd_BridgedChain="5EHnXaT5BhiSGP5hbdt5EJSapXYbxEv678jyWHEUskCXcjqo"
|
|
ON_BRIDGE_HUB_WESTEND_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhro_ThisChain="5EHnXaT5BhiSGP5h9Rg8sgUJqoLym3iEaWUiboT8S9AT5xFh"
|
|
ON_BRIDGE_HUB_WESTEND_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhro_BridgedChain="5EHnXaT5BhiSGP5h9RgQci1txJ2BDbp7KBRE9k8xty3BMUSi"
|
|
|
|
LANE_ID="00000002"
|
|
XCM_VERSION=3
|
|
|
|
function init_ro_wnd() {
|
|
ensure_relayer
|
|
|
|
RUST_LOG=runtime=trace,rpc=trace,bridge=trace \
|
|
~/local_bridge_testing/bin/substrate-relay init-bridge rococo-to-bridge-hub-westend \
|
|
--source-host localhost \
|
|
--source-port 9942 \
|
|
--source-version-mode Auto \
|
|
--target-host localhost \
|
|
--target-port 8945 \
|
|
--target-version-mode Auto \
|
|
--target-signer //Bob
|
|
}
|
|
|
|
function init_wnd_ro() {
|
|
ensure_relayer
|
|
|
|
RUST_LOG=runtime=trace,rpc=trace,bridge=trace \
|
|
~/local_bridge_testing/bin/substrate-relay init-bridge westend-to-bridge-hub-rococo \
|
|
--source-host localhost \
|
|
--source-port 9945 \
|
|
--source-version-mode Auto \
|
|
--target-host localhost \
|
|
--target-port 8943 \
|
|
--target-version-mode Auto \
|
|
--target-signer //Bob
|
|
}
|
|
|
|
function run_relay() {
|
|
ensure_relayer
|
|
|
|
RUST_LOG=runtime=trace,rpc=trace,bridge=trace \
|
|
~/local_bridge_testing/bin/substrate-relay relay-headers-and-messages bridge-hub-rococo-bridge-hub-westend \
|
|
--rococo-host localhost \
|
|
--rococo-port 9942 \
|
|
--rococo-version-mode Auto \
|
|
--bridge-hub-rococo-host localhost \
|
|
--bridge-hub-rococo-port 8943 \
|
|
--bridge-hub-rococo-version-mode Auto \
|
|
--bridge-hub-rococo-signer //Charlie \
|
|
--bridge-hub-rococo-transactions-mortality 4 \
|
|
--westend-host localhost \
|
|
--westend-port 9945 \
|
|
--westend-version-mode Auto \
|
|
--bridge-hub-westend-host localhost \
|
|
--bridge-hub-westend-port 8945 \
|
|
--bridge-hub-westend-version-mode Auto \
|
|
--bridge-hub-westend-signer //Charlie \
|
|
--bridge-hub-westend-transactions-mortality 4 \
|
|
--lane "${LANE_ID}"
|
|
}
|
|
|
|
case "$1" in
|
|
run-relay)
|
|
init_ro_wnd
|
|
init_wnd_ro
|
|
run_relay
|
|
;;
|
|
init-asset-hub-rococo-local)
|
|
ensure_polkadot_js_api
|
|
# create foreign assets for native Westend token (governance call on Rococo)
|
|
force_create_foreign_asset \
|
|
"ws://127.0.0.1:9942" \
|
|
"//Alice" \
|
|
1000 \
|
|
"ws://127.0.0.1:9910" \
|
|
"$(jq --null-input '{ "parents": 2, "interior": { "X1": { "GlobalConsensus": "Westend" } } }')" \
|
|
"$GLOBAL_CONSENSUS_WESTEND_SOVEREIGN_ACCOUNT" \
|
|
10000000000 \
|
|
true
|
|
# drip SA which holds reserves
|
|
transfer_balance \
|
|
"ws://127.0.0.1:9910" \
|
|
"//Alice" \
|
|
"$GLOBAL_CONSENSUS_WESTEND_ASSET_HUB_WESTEND_1000_SOVEREIGN_ACCOUNT" \
|
|
$((1000000000000 + 50000000000 * 20))
|
|
# HRMP
|
|
open_hrmp_channels \
|
|
"ws://127.0.0.1:9942" \
|
|
"//Alice" \
|
|
1000 1013 4 524288
|
|
open_hrmp_channels \
|
|
"ws://127.0.0.1:9942" \
|
|
"//Alice" \
|
|
1013 1000 4 524288
|
|
# set XCM version of remote AssetHubWestend
|
|
force_xcm_version \
|
|
"ws://127.0.0.1:9942" \
|
|
"//Alice" \
|
|
1000 \
|
|
"ws://127.0.0.1:9910" \
|
|
"$(jq --null-input '{ "parents": 2, "interior": { "X2": [ { "GlobalConsensus": "Westend" }, { "Parachain": 1000 } ] } }')" \
|
|
$XCM_VERSION
|
|
;;
|
|
init-bridge-hub-rococo-local)
|
|
ensure_polkadot_js_api
|
|
# SA of sibling asset hub pays for the execution
|
|
transfer_balance \
|
|
"ws://127.0.0.1:8943" \
|
|
"//Alice" \
|
|
"$ASSET_HUB_ROCOCO_SOVEREIGN_ACCOUNT_AT_BRIDGE_HUB_ROCOCO" \
|
|
$((1000000000000 + 50000000000 * 20))
|
|
# drip SA of lane dedicated to asset hub for paying rewards for delivery
|
|
transfer_balance \
|
|
"ws://127.0.0.1:8943" \
|
|
"//Alice" \
|
|
"$ON_BRIDGE_HUB_ROCOCO_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhwd_ThisChain" \
|
|
$((1000000000000 + 2000000000000))
|
|
# drip SA of lane dedicated to asset hub for paying rewards for delivery confirmation
|
|
transfer_balance \
|
|
"ws://127.0.0.1:8943" \
|
|
"//Alice" \
|
|
"$ON_BRIDGE_HUB_ROCOCO_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhwd_BridgedChain" \
|
|
$((1000000000000 + 2000000000000))
|
|
# set XCM version of remote BridgeHubWestend
|
|
force_xcm_version \
|
|
"ws://127.0.0.1:9942" \
|
|
"//Alice" \
|
|
1013 \
|
|
"ws://127.0.0.1:8943" \
|
|
"$(jq --null-input '{ "parents": 2, "interior": { "X2": [ { "GlobalConsensus": "Westend" }, { "Parachain": 1002 } ] } }')" \
|
|
$XCM_VERSION
|
|
;;
|
|
init-asset-hub-westend-local)
|
|
ensure_polkadot_js_api
|
|
# create foreign assets for native Rococo token (governance call on Westend)
|
|
force_create_foreign_asset \
|
|
"ws://127.0.0.1:9945" \
|
|
"//Alice" \
|
|
1000 \
|
|
"ws://127.0.0.1:9010" \
|
|
"$(jq --null-input '{ "parents": 2, "interior": { "X1": { "GlobalConsensus": "Rococo" } } }')" \
|
|
"$GLOBAL_CONSENSUS_ROCOCO_SOVEREIGN_ACCOUNT" \
|
|
10000000000 \
|
|
true
|
|
# drip SA which holds reserves
|
|
transfer_balance \
|
|
"ws://127.0.0.1:9010" \
|
|
"//Alice" \
|
|
"$GLOBAL_CONSENSUS_ROCOCO_ASSET_HUB_ROCOCO_1000_SOVEREIGN_ACCOUNT" \
|
|
$((1000000000000000 + 50000000000 * 20))
|
|
# HRMP
|
|
open_hrmp_channels \
|
|
"ws://127.0.0.1:9945" \
|
|
"//Alice" \
|
|
1000 1002 4 524288
|
|
open_hrmp_channels \
|
|
"ws://127.0.0.1:9945" \
|
|
"//Alice" \
|
|
1002 1000 4 524288
|
|
# set XCM version of remote AssetHubRococo
|
|
force_xcm_version \
|
|
"ws://127.0.0.1:9945" \
|
|
"//Alice" \
|
|
1000 \
|
|
"ws://127.0.0.1:9010" \
|
|
"$(jq --null-input '{ "parents": 2, "interior": { "X2": [ { "GlobalConsensus": "Rococo" }, { "Parachain": 1000 } ] } }')" \
|
|
$XCM_VERSION
|
|
;;
|
|
init-bridge-hub-westend-local)
|
|
# SA of sibling asset hub pays for the execution
|
|
transfer_balance \
|
|
"ws://127.0.0.1:8945" \
|
|
"//Alice" \
|
|
"$ASSET_HUB_WESTEND_SOVEREIGN_ACCOUNT_AT_BRIDGE_HUB_WESTEND" \
|
|
$((1000000000000000 + 50000000000 * 20))
|
|
# drip SA of lane dedicated to asset hub for paying rewards for delivery
|
|
transfer_balance \
|
|
"ws://127.0.0.1:8945" \
|
|
"//Alice" \
|
|
"$ON_BRIDGE_HUB_WESTEND_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhro_ThisChain" \
|
|
$((1000000000000000 + 2000000000000))
|
|
# drip SA of lane dedicated to asset hub for paying rewards for delivery confirmation
|
|
transfer_balance \
|
|
"ws://127.0.0.1:8945" \
|
|
"//Alice" \
|
|
"$ON_BRIDGE_HUB_WESTEND_SOVEREIGN_ACCOUNT_FOR_LANE_00000002_bhro_BridgedChain" \
|
|
$((1000000000000000 + 2000000000000))
|
|
# set XCM version of remote BridgeHubRococo
|
|
force_xcm_version \
|
|
"ws://127.0.0.1:9945" \
|
|
"//Alice" \
|
|
1002 \
|
|
"ws://127.0.0.1:8945" \
|
|
"$(jq --null-input '{ "parents": 2, "interior": { "X2": [ { "GlobalConsensus": "Rococo" }, { "Parachain": 1013 } ] } }')" \
|
|
$XCM_VERSION
|
|
;;
|
|
reserve-transfer-assets-from-asset-hub-rococo-local)
|
|
ensure_polkadot_js_api
|
|
# send ROCs to Alice account on AHW
|
|
limited_reserve_transfer_assets \
|
|
"ws://127.0.0.1:9910" \
|
|
"//Alice" \
|
|
"$(jq --null-input '{ "V3": { "parents": 2, "interior": { "X2": [ { "GlobalConsensus": "Westend" }, { "Parachain": 1000 } ] } } }')" \
|
|
"$(jq --null-input '{ "V3": { "parents": 0, "interior": { "X1": { "AccountId32": { "id": [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125] } } } } }')" \
|
|
"$(jq --null-input '{ "V3": [ { "id": { "Concrete": { "parents": 1, "interior": "Here" } }, "fun": { "Fungible": 200000000000 } } ] }')" \
|
|
0 \
|
|
"Unlimited"
|
|
;;
|
|
withdraw-reserve-assets-from-asset-hub-rococo-local)
|
|
ensure_polkadot_js_api
|
|
# send back only 100000000000 wrappedWNDs to Alice account on AHW
|
|
limited_reserve_transfer_assets \
|
|
"ws://127.0.0.1:9910" \
|
|
"//Alice" \
|
|
"$(jq --null-input '{ "V3": { "parents": 2, "interior": { "X2": [ { "GlobalConsensus": "Westend" }, { "Parachain": 1000 } ] } } }')" \
|
|
"$(jq --null-input '{ "V3": { "parents": 0, "interior": { "X1": { "AccountId32": { "id": [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125] } } } } }')" \
|
|
"$(jq --null-input '{ "V3": [ { "id": { "Concrete": { "parents": 2, "interior": { "X1": { "GlobalConsensus": "Westend" } } } }, "fun": { "Fungible": 40000000000 } } ] }')" \
|
|
0 \
|
|
"Unlimited"
|
|
;;
|
|
reserve-transfer-assets-from-asset-hub-westend-local)
|
|
ensure_polkadot_js_api
|
|
# send WNDs to Alice account on AHR
|
|
limited_reserve_transfer_assets \
|
|
"ws://127.0.0.1:9010" \
|
|
"//Alice" \
|
|
"$(jq --null-input '{ "V3": { "parents": 2, "interior": { "X2": [ { "GlobalConsensus": "Rococo" }, { "Parachain": 1000 } ] } } }')" \
|
|
"$(jq --null-input '{ "V3": { "parents": 0, "interior": { "X1": { "AccountId32": { "id": [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125] } } } } }')" \
|
|
"$(jq --null-input '{ "V3": [ { "id": { "Concrete": { "parents": 1, "interior": "Here" } }, "fun": { "Fungible": 150000000000 } } ] }')" \
|
|
0 \
|
|
"Unlimited"
|
|
;;
|
|
withdraw-reserve-assets-from-asset-hub-westend-local)
|
|
ensure_polkadot_js_api
|
|
# send back only 100000000000 wrappedROCs to Alice account on AHR
|
|
limited_reserve_transfer_assets \
|
|
"ws://127.0.0.1:9010" \
|
|
"//Alice" \
|
|
"$(jq --null-input '{ "V3": { "parents": 2, "interior": { "X2": [ { "GlobalConsensus": "Rococo" }, { "Parachain": 1000 } ] } } }')" \
|
|
"$(jq --null-input '{ "V3": { "parents": 0, "interior": { "X1": { "AccountId32": { "id": [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125] } } } } }')" \
|
|
"$(jq --null-input '{ "V3": [ { "id": { "Concrete": { "parents": 2, "interior": { "X1": { "GlobalConsensus": "Rococo" } } } }, "fun": { "Fungible": 100000000000 } } ] }')" \
|
|
0 \
|
|
"Unlimited"
|
|
;;
|
|
claim-rewards-bridge-hub-rococo-local)
|
|
ensure_polkadot_js_api
|
|
# bhwd -> [62, 68, 77, 64] -> 0x62687764
|
|
claim_rewards \
|
|
"ws://127.0.0.1:8943" \
|
|
"//Charlie" \
|
|
"0x${LANE_ID}" \
|
|
"0x62687764" \
|
|
"ThisChain"
|
|
claim_rewards \
|
|
"ws://127.0.0.1:8943" \
|
|
"//Charlie" \
|
|
"0x${LANE_ID}" \
|
|
"0x62687764" \
|
|
"BridgedChain"
|
|
;;
|
|
claim-rewards-bridge-hub-westend-local)
|
|
# bhro -> [62, 68, 72, 6f] -> 0x6268726f
|
|
claim_rewards \
|
|
"ws://127.0.0.1:8945" \
|
|
"//Charlie" \
|
|
"0x${LANE_ID}" \
|
|
"0x6268726f" \
|
|
"ThisChain"
|
|
claim_rewards \
|
|
"ws://127.0.0.1:8945" \
|
|
"//Charlie" \
|
|
"0x${LANE_ID}" \
|
|
"0x6268726f" \
|
|
"BridgedChain"
|
|
;;
|
|
stop)
|
|
pkill -f polkadot
|
|
pkill -f parachain
|
|
;;
|
|
import)
|
|
# to avoid trigger anything here
|
|
;;
|
|
*)
|
|
echo "A command is require. Supported commands for:
|
|
Local (zombienet) run:
|
|
- run-relay
|
|
- init-asset-hub-rococo-local
|
|
- init-bridge-hub-rococo-local
|
|
- init-asset-hub-westend-local
|
|
- init-bridge-hub-westend-local
|
|
- reserve-transfer-assets-from-asset-hub-rococo-local
|
|
- withdraw-reserve-assets-from-asset-hub-rococo-local
|
|
- reserve-transfer-assets-from-asset-hub-westend-local
|
|
- withdraw-reserve-assets-from-asset-hub-westend-local
|
|
- claim-rewards-bridge-hub-rococo-local
|
|
- claim-rewards-bridge-hub-westend-local";
|
|
exit 1
|
|
;;
|
|
esac
|