mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 08:11:04 +00:00
Remove bridges subtree
This commit is contained in:
committed by
Bastian Köcher
parent
d38f6e6728
commit
9a3e2c8c5a
@@ -1,31 +0,0 @@
|
||||
# Bridges Tests for Local Rococo <> Westend Bridge
|
||||
|
||||
This folder contains [zombienet](https://github.com/paritytech/zombienet/) based integration tests for both
|
||||
onchain and offchain bridges code. Due to some
|
||||
[technical difficulties](https://github.com/paritytech/parity-bridges-common/pull/2649#issue-1965339051), we
|
||||
are using native zombienet provider, which means that you need to build some binaries locally.
|
||||
|
||||
To start those tests, you need to:
|
||||
|
||||
- download latest [zombienet release](https://github.com/paritytech/zombienet/releases);
|
||||
|
||||
- build Polkadot binary by running `cargo build -p polkadot --release --features fast-runtime` command in the
|
||||
[`polkadot-sdk`](https://github.com/paritytech/polkadot-sdk) repository clone;
|
||||
|
||||
- build Polkadot Parachain binary by running `cargo build -p polkadot-parachain-bin --release` command in the
|
||||
[`polkadot-sdk`](https://github.com/paritytech/polkadot-sdk) repository clone;
|
||||
|
||||
- ensure that you have [`node`](https://nodejs.org/en) installed. Additionally, we'll need globally installed
|
||||
`polkadot/api-cli` package (use `npm install -g @polkadot/api-cli@beta` to install it);
|
||||
|
||||
- build Substrate relay by running `cargo build -p substrate-relay --release` command in the
|
||||
[`parity-bridges-common`](https://github.com/paritytech/parity-bridges-common) repository clone.
|
||||
|
||||
- copy fresh `substrate-relay` binary, built in previous point, to the `~/local_bridge_testing/bin/substrate-relay`;
|
||||
|
||||
- change the `POLKADOT_SDK_PATH` and `ZOMBIENET_BINARY_PATH` (and ensure that the nearby variables
|
||||
have correct values) in the `./run-tests.sh`.
|
||||
|
||||
After that, you could run tests with the `./run-tests.sh` command. Hopefully, it'll show the
|
||||
"All tests have completed successfully" message in the end. Otherwise, it'll print paths to zombienet
|
||||
process logs, which, in turn, may be used to track locations of all spinned relay and parachain nodes.
|
||||
@@ -1,88 +0,0 @@
|
||||
[settings]
|
||||
node_spawn_timeout = 240
|
||||
|
||||
[relaychain]
|
||||
default_command = "{{POLKADOT_BINARY}}"
|
||||
default_args = [ "-lparachain=debug,xcm=trace" ]
|
||||
chain = "rococo-local"
|
||||
|
||||
[[relaychain.nodes]]
|
||||
name = "alice-rococo-validator"
|
||||
validator = true
|
||||
rpc_port = 9932
|
||||
ws_port = 9942
|
||||
balance = 2000000000000
|
||||
|
||||
[[relaychain.nodes]]
|
||||
name = "bob-rococo-validator"
|
||||
validator = true
|
||||
rpc_port = 9933
|
||||
ws_port = 9943
|
||||
balance = 2000000000000
|
||||
|
||||
[[relaychain.nodes]]
|
||||
name = "charlie-rococo-validator"
|
||||
validator = true
|
||||
rpc_port = 9934
|
||||
ws_port = 9944
|
||||
balance = 2000000000000
|
||||
|
||||
[[parachains]]
|
||||
id = 1013
|
||||
chain = "bridge-hub-rococo-local"
|
||||
cumulus_based = true
|
||||
|
||||
# run alice as parachain collator
|
||||
[[parachains.collators]]
|
||||
name = "bridge-hub-rococo-collator1"
|
||||
validator = true
|
||||
command = "{{POLKADOT_PARACHAIN_BINARY}}"
|
||||
rpc_port = 8933
|
||||
ws_port = 8943
|
||||
args = [
|
||||
"-lparachain=debug,runtime::bridge-hub=trace,runtime::bridge=trace,runtime::bridge-dispatch=trace,bridge=trace,runtime::bridge-messages=trace,xcm=trace"
|
||||
]
|
||||
|
||||
# run bob as parachain collator
|
||||
[[parachains.collators]]
|
||||
name = "bridge-hub-rococo-collator2"
|
||||
validator = true
|
||||
command = "{{POLKADOT_PARACHAIN_BINARY}}"
|
||||
rpc_port = 8934
|
||||
ws_port = 8944
|
||||
args = [
|
||||
"-lparachain=trace,runtime::bridge-hub=trace,runtime::bridge=trace,runtime::bridge-dispatch=trace,bridge=trace,runtime::bridge-messages=trace,xcm=trace"
|
||||
]
|
||||
|
||||
[[parachains]]
|
||||
id = 1000
|
||||
chain = "asset-hub-rococo-local"
|
||||
cumulus_based = true
|
||||
|
||||
[[parachains.collators]]
|
||||
name = "asset-hub-rococo-collator1"
|
||||
rpc_port = 9911
|
||||
ws_port = 9910
|
||||
command = "{{POLKADOT_PARACHAIN_BINARY}}"
|
||||
args = [
|
||||
"-lparachain=debug,xcm=trace,runtime::bridge-transfer=trace"
|
||||
]
|
||||
|
||||
[[parachains.collators]]
|
||||
name = "asset-hub-rococo-collator2"
|
||||
command = "{{POLKADOT_PARACHAIN_BINARY}}"
|
||||
args = [
|
||||
"-lparachain=debug,xcm=trace,runtime::bridge-transfer=trace"
|
||||
]
|
||||
|
||||
#[[hrmp_channels]]
|
||||
#sender = 1000
|
||||
#recipient = 1013
|
||||
#max_capacity = 4
|
||||
#max_message_size = 524288
|
||||
#
|
||||
#[[hrmp_channels]]
|
||||
#sender = 1013
|
||||
#recipient = 1000
|
||||
#max_capacity = 4
|
||||
#max_message_size = 524288
|
||||
@@ -1,88 +0,0 @@
|
||||
[settings]
|
||||
node_spawn_timeout = 240
|
||||
|
||||
[relaychain]
|
||||
default_command = "{{POLKADOT_BINARY}}"
|
||||
default_args = [ "-lparachain=debug,xcm=trace" ]
|
||||
chain = "westend-local"
|
||||
|
||||
[[relaychain.nodes]]
|
||||
name = "alice-westend-validator"
|
||||
validator = true
|
||||
rpc_port = 9935
|
||||
ws_port = 9945
|
||||
balance = 2000000000000
|
||||
|
||||
[[relaychain.nodes]]
|
||||
name = "bob-westend-validator"
|
||||
validator = true
|
||||
rpc_port = 9936
|
||||
ws_port = 9946
|
||||
balance = 2000000000000
|
||||
|
||||
[[relaychain.nodes]]
|
||||
name = "charlie-westend-validator"
|
||||
validator = true
|
||||
rpc_port = 9937
|
||||
ws_port = 9947
|
||||
balance = 2000000000000
|
||||
|
||||
[[parachains]]
|
||||
id = 1002
|
||||
chain = "bridge-hub-westend-local"
|
||||
cumulus_based = true
|
||||
|
||||
# run alice as parachain collator
|
||||
[[parachains.collators]]
|
||||
name = "bridge-hub-westend-collator1"
|
||||
validator = true
|
||||
command = "{{POLKADOT_PARACHAIN_BINARY}}"
|
||||
rpc_port = 8935
|
||||
ws_port = 8945
|
||||
args = [
|
||||
"-lparachain=debug,runtime::mmr=info,substrate=info,runtime=info,runtime::bridge-hub=trace,runtime::bridge=trace,runtime::bridge-dispatch=trace,bridge=trace,runtime::bridge-messages=trace,xcm=trace"
|
||||
]
|
||||
|
||||
# run bob as parachain collator
|
||||
[[parachains.collators]]
|
||||
name = "bridge-hub-westend-collator2"
|
||||
validator = true
|
||||
command = "{{POLKADOT_PARACHAIN_BINARY}}"
|
||||
rpc_port = 8936
|
||||
ws_port = 8946
|
||||
args = [
|
||||
"-lparachain=trace,runtime::mmr=info,substrate=info,runtime=info,runtime::bridge-hub=trace,runtime::bridge=trace,runtime::bridge-dispatch=trace,bridge=trace,runtime::bridge-messages=trace,xcm=trace"
|
||||
]
|
||||
|
||||
[[parachains]]
|
||||
id = 1000
|
||||
chain = "asset-hub-westend-local"
|
||||
cumulus_based = true
|
||||
|
||||
[[parachains.collators]]
|
||||
name = "asset-hub-westend-collator1"
|
||||
rpc_port = 9011
|
||||
ws_port = 9010
|
||||
command = "{{POLKADOT_PARACHAIN_BINARY}}"
|
||||
args = [
|
||||
"-lparachain=debug,xcm=trace,runtime::bridge-transfer=trace"
|
||||
]
|
||||
|
||||
[[parachains.collators]]
|
||||
name = "asset-hub-westend-collator2"
|
||||
command = "{{POLKADOT_PARACHAIN_BINARY}}"
|
||||
args = [
|
||||
"-lparachain=debug,xcm=trace,runtime::bridge-transfer=trace"
|
||||
]
|
||||
|
||||
#[[hrmp_channels]]
|
||||
#sender = 1000
|
||||
#recipient = 1002
|
||||
#max_capacity = 4
|
||||
#max_message_size = 524288
|
||||
#
|
||||
#[[hrmp_channels]]
|
||||
#sender = 1002
|
||||
#recipient = 1000
|
||||
#max_capacity = 4
|
||||
#max_message_size = 524288
|
||||
@@ -1,401 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# import common functions
|
||||
source "$FRAMEWORK_PATH/utils/bridges.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!("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!("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"
|
||||
ASSET_HUB_WESTEND_SOVEREIGN_ACCOUNT_AT_BRIDGE_HUB_WESTEND="5Eg2fntNprdN3FgH4sfEaaZhYtddZQSQUqvYJ1f2mLtinVhV"
|
||||
GLOBAL_CONSENSUS_WESTEND_SOVEREIGN_ACCOUNT="5He2Qdztyxxa4GoagY6q1jaiLMmKy1gXS7PdZkhfj8ZG9hk5"
|
||||
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() {
|
||||
local relayer_path=$(ensure_relayer)
|
||||
|
||||
RUST_LOG=runtime=trace,rpc=trace,bridge=trace \
|
||||
$relayer_path 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() {
|
||||
local relayer_path=$(ensure_relayer)
|
||||
|
||||
RUST_LOG=runtime=trace,rpc=trace,bridge=trace \
|
||||
$relayer_path 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() {
|
||||
local relayer_path=$(ensure_relayer)
|
||||
|
||||
RUST_LOG=runtime=trace,rpc=trace,bridge=trace \
|
||||
$relayer_path 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_wnd_ro
|
||||
init_ro_wnd
|
||||
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
|
||||
# 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
|
||||
# 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)
|
||||
amount=$2
|
||||
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": '$amount' } } ] }')" \
|
||||
0 \
|
||||
"Unlimited"
|
||||
;;
|
||||
withdraw-reserve-assets-from-asset-hub-rococo-local)
|
||||
amount=$2
|
||||
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": '$amount' } } ] }')" \
|
||||
0 \
|
||||
"Unlimited"
|
||||
;;
|
||||
reserve-transfer-assets-from-asset-hub-westend-local)
|
||||
amount=$2
|
||||
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": '$amount' } } ] }')" \
|
||||
0 \
|
||||
"Unlimited"
|
||||
;;
|
||||
withdraw-reserve-assets-from-asset-hub-westend-local)
|
||||
amount=$2
|
||||
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": '$amount' } } ] }')" \
|
||||
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
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
$ENV_PATH/bridges_rococo_westend.sh "$@"
|
||||
@@ -1,8 +0,0 @@
|
||||
Description: Check if the HRMP channel between Rococo BH and Rococo AH was opened successfully
|
||||
Network: ./bridge_hub_rococo_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# ensure that initialization has completed
|
||||
asset-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/wait-hrmp-channel-opened.js with "1013" within 300 seconds
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
Description: Check if the with-Westend GRANDPA pallet was initialized at Rococo BH
|
||||
Network: ./bridge_hub_rococo_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# relay is already started - let's wait until with-Westend GRANDPA pallet is initialized at Rococo
|
||||
bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/best-finalized-header-at-bridged-chain.js with "Westend,0" within 400 seconds
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
trap "trap - SIGTERM && kill -9 -$$" SIGINT SIGTERM EXIT
|
||||
|
||||
source "$FRAMEWORK_PATH/utils/zombienet.sh"
|
||||
|
||||
# whether to init the chains (open HRMP channels, set XCM version, create reserve assets, etc)
|
||||
init=0
|
||||
start_relayer=0
|
||||
while [ $# -ne 0 ]
|
||||
do
|
||||
arg="$1"
|
||||
case "$arg" in
|
||||
--init)
|
||||
init=1
|
||||
;;
|
||||
--start-relayer)
|
||||
start_relayer=1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
logs_dir=$TEST_DIR/logs
|
||||
helper_script="${BASH_SOURCE%/*}/helper.sh"
|
||||
|
||||
rococo_def=${BASH_SOURCE%/*}/bridge_hub_rococo_local_network.toml
|
||||
start_zombienet $TEST_DIR $rococo_def rococo_dir rococo_pid
|
||||
echo
|
||||
|
||||
westend_def=${BASH_SOURCE%/*}/bridge_hub_westend_local_network.toml
|
||||
start_zombienet $TEST_DIR $westend_def westend_dir westend_pid
|
||||
echo
|
||||
|
||||
if [[ $init -eq 1 ]]; then
|
||||
rococo_init_log=$logs_dir/rococo-init.log
|
||||
echo -e "Setting up the rococo side of the bridge. Logs available at: $rococo_init_log\n"
|
||||
|
||||
westend_init_log=$logs_dir/westend-init.log
|
||||
echo -e "Setting up the westend side of the bridge. Logs available at: $westend_init_log\n"
|
||||
|
||||
$helper_script init-asset-hub-rococo-local >> $rococo_init_log 2>&1 &
|
||||
rococo_init_pid=$!
|
||||
$helper_script init-asset-hub-westend-local >> $westend_init_log 2>&1 &
|
||||
westend_init_pid=$!
|
||||
wait -n $rococo_init_pid $westend_init_pid
|
||||
|
||||
|
||||
$helper_script init-bridge-hub-rococo-local >> $rococo_init_log 2>&1 &
|
||||
rococo_init_pid=$!
|
||||
$helper_script init-bridge-hub-westend-local >> $westend_init_log 2>&1 &
|
||||
westend_init_pid=$!
|
||||
wait -n $rococo_init_pid $westend_init_pid
|
||||
|
||||
run_zndsl ${BASH_SOURCE%/*}/rococo-init.zndsl $rococo_dir
|
||||
run_zndsl ${BASH_SOURCE%/*}/westend-init.zndsl $westend_dir
|
||||
fi
|
||||
|
||||
if [[ $start_relayer -eq 1 ]]; then
|
||||
${BASH_SOURCE%/*}/start_relayer.sh $rococo_dir $westend_dir relayer_pid
|
||||
fi
|
||||
|
||||
echo $rococo_dir > $TEST_DIR/rococo.env
|
||||
echo $westend_dir > $TEST_DIR/westend.env
|
||||
echo
|
||||
|
||||
wait -n $rococo_pid $westend_pid $relayer_pid
|
||||
kill -9 -$$
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
source "$FRAMEWORK_PATH/utils/common.sh"
|
||||
source "$FRAMEWORK_PATH/utils/zombienet.sh"
|
||||
|
||||
rococo_dir=$1
|
||||
westend_dir=$2
|
||||
__relayer_pid=$3
|
||||
|
||||
logs_dir=$TEST_DIR/logs
|
||||
helper_script="${BASH_SOURCE%/*}/helper.sh"
|
||||
|
||||
relayer_log=$logs_dir/relayer.log
|
||||
echo -e "Starting rococo-westend relayer. Logs available at: $relayer_log\n"
|
||||
start_background_process "$helper_script run-relay" $relayer_log relayer_pid
|
||||
|
||||
run_zndsl ${BASH_SOURCE%/*}/rococo.zndsl $rococo_dir
|
||||
run_zndsl ${BASH_SOURCE%/*}/westend.zndsl $westend_dir
|
||||
|
||||
eval $__relayer_pid="'$relayer_pid'"
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
Description: Check if the HRMP channel between Westend BH and Westend AH was opened successfully
|
||||
Network: ./bridge_hub_westend_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# ensure that initialization has completed
|
||||
asset-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/wait-hrmp-channel-opened.js with "1002" within 600 seconds
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
Description: Check if the with-Rococo GRANDPA pallet was initialized at Westend BH
|
||||
Network: ./bridge_hub_westend_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# relay is already started - let's wait until with-Rococo GRANDPA pallet is initialized at Westend
|
||||
bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/best-finalized-header-at-bridged-chain.js with "Rococo,0" within 400 seconds
|
||||
@@ -1,25 +0,0 @@
|
||||
async function run(nodeName, networkInfo, args) {
|
||||
const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
|
||||
const api = await zombie.connect(wsUri, userDefinedTypes);
|
||||
|
||||
// TODO: could be replaced with https://github.com/polkadot-js/api/issues/4930 (depends on metadata v15) later
|
||||
const bridgedChainName = args[0];
|
||||
const expectedBridgedChainHeaderNumber = Number(args[1]);
|
||||
const runtimeApiMethod = bridgedChainName + "FinalityApi_best_finalized";
|
||||
|
||||
while (true) {
|
||||
const encodedBestFinalizedHeaderId = await api.rpc.state.call(runtimeApiMethod, []);
|
||||
const bestFinalizedHeaderId = api.createType("Option<BpRuntimeHeaderId>", encodedBestFinalizedHeaderId);
|
||||
if (bestFinalizedHeaderId.isSome) {
|
||||
const bestFinalizedHeaderNumber = Number(bestFinalizedHeaderId.unwrap().toHuman()[0]);
|
||||
if (bestFinalizedHeaderNumber > expectedBridgedChainHeaderNumber) {
|
||||
return bestFinalizedHeaderNumber;
|
||||
}
|
||||
}
|
||||
|
||||
// else sleep and retry
|
||||
await new Promise((resolve) => setTimeout(resolve, 6000));
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { run }
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
grandpaPalletName: "bridgeRococoGrandpa",
|
||||
parachainsPalletName: "bridgeRococoParachains",
|
||||
messagesPalletName: "bridgeRococoMessages",
|
||||
bridgedBridgeHubParaId: 1013,
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
grandpaPalletName: "bridgeWestendGrandpa",
|
||||
parachainsPalletName: "bridgeWestendParachains",
|
||||
messagesPalletName: "bridgeWestendMessages",
|
||||
bridgedBridgeHubParaId: 1002,
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
async function run(nodeName, networkInfo, args) {
|
||||
const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
|
||||
const api = await zombie.connect(wsUri, userDefinedTypes);
|
||||
|
||||
const accountAddress = args[0];
|
||||
const expectedIncrease = BigInt(args[1]);
|
||||
const initialAccountData = await api.query.system.account(accountAddress);
|
||||
const initialAccountBalance = initialAccountData.data['free'];
|
||||
while (true) {
|
||||
const accountData = await api.query.system.account(accountAddress);
|
||||
const accountBalance = accountData.data['free'];
|
||||
if (accountBalance > initialAccountBalance + expectedIncrease) {
|
||||
return accountBalance;
|
||||
}
|
||||
|
||||
// else sleep and retry
|
||||
await new Promise((resolve) => setTimeout(resolve, 6000));
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {run}
|
||||
@@ -1,44 +0,0 @@
|
||||
const utils = require("./utils");
|
||||
|
||||
async function run(nodeName, networkInfo, args) {
|
||||
const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
|
||||
const api = await zombie.connect(wsUri, userDefinedTypes);
|
||||
|
||||
// parse arguments
|
||||
const exitAfterSeconds = Number(args[0]);
|
||||
const bridgedChain = require("./chains/" + args[1]);
|
||||
|
||||
// start listening to new blocks
|
||||
let totalGrandpaHeaders = 0;
|
||||
let initialParachainHeaderImported = false;
|
||||
api.rpc.chain.subscribeNewHeads(async function (header) {
|
||||
const apiAtParent = await api.at(header.parentHash);
|
||||
const apiAtCurrent = await api.at(header.hash);
|
||||
const currentEvents = await apiAtCurrent.query.system.events();
|
||||
|
||||
totalGrandpaHeaders += await utils.ensureOnlyMandatoryGrandpaHeadersImported(
|
||||
bridgedChain,
|
||||
apiAtParent,
|
||||
apiAtCurrent,
|
||||
currentEvents,
|
||||
);
|
||||
initialParachainHeaderImported = await utils.ensureOnlyInitialParachainHeaderImported(
|
||||
bridgedChain,
|
||||
apiAtParent,
|
||||
apiAtCurrent,
|
||||
currentEvents,
|
||||
);
|
||||
});
|
||||
|
||||
// wait given time
|
||||
await new Promise(resolve => setTimeout(resolve, exitAfterSeconds * 1000));
|
||||
// if we haven't seen any new GRANDPA or parachain headers => fail
|
||||
if (totalGrandpaHeaders == 0) {
|
||||
throw new Error("No bridged relay chain headers imported");
|
||||
}
|
||||
if (!initialParachainHeaderImported) {
|
||||
throw new Error("No bridged parachain headers imported");
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { run }
|
||||
@@ -1,81 +0,0 @@
|
||||
const utils = require("./utils");
|
||||
|
||||
async function run(nodeName, networkInfo, args) {
|
||||
const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
|
||||
const api = await zombie.connect(wsUri, userDefinedTypes);
|
||||
|
||||
// parse arguments
|
||||
const exitAfterSeconds = Number(args[0]);
|
||||
const bridgedChain = require("./chains/" + args[1]);
|
||||
|
||||
// start listening to new blocks
|
||||
let atLeastOneMessageReceived = false;
|
||||
let atLeastOneMessageDelivered = false;
|
||||
const unsubscribe = await api.rpc.chain.subscribeNewHeads(async function (header) {
|
||||
const apiAtParent = await api.at(header.parentHash);
|
||||
const apiAtCurrent = await api.at(header.hash);
|
||||
const currentEvents = await apiAtCurrent.query.system.events();
|
||||
|
||||
const messagesReceived = currentEvents.find((record) => {
|
||||
return record.event.section == bridgedChain.messagesPalletName
|
||||
&& record.event.method == "MessagesReceived";
|
||||
}) != undefined;
|
||||
const messagesDelivered = currentEvents.find((record) => {
|
||||
return record.event.section == bridgedChain.messagesPalletName &&
|
||||
record.event.method == "MessagesDelivered";
|
||||
}) != undefined;
|
||||
const hasMessageUpdates = messagesReceived || messagesDelivered;
|
||||
atLeastOneMessageReceived = atLeastOneMessageReceived || messagesReceived;
|
||||
atLeastOneMessageDelivered = atLeastOneMessageDelivered || messagesDelivered;
|
||||
|
||||
if (!hasMessageUpdates) {
|
||||
// if there are no any message update transactions, we only expect mandatory GRANDPA
|
||||
// headers and initial parachain headers
|
||||
await utils.ensureOnlyMandatoryGrandpaHeadersImported(
|
||||
bridgedChain,
|
||||
apiAtParent,
|
||||
apiAtCurrent,
|
||||
currentEvents,
|
||||
);
|
||||
await utils.ensureOnlyInitialParachainHeaderImported(
|
||||
bridgedChain,
|
||||
apiAtParent,
|
||||
apiAtCurrent,
|
||||
currentEvents,
|
||||
);
|
||||
} else {
|
||||
const messageTransactions = (messagesReceived ? 1 : 0) + (messagesDelivered ? 1 : 0);
|
||||
|
||||
// otherwise we only accept at most one GRANDPA header
|
||||
const newGrandpaHeaders = utils.countGrandpaHeaderImports(bridgedChain, currentEvents);
|
||||
if (newGrandpaHeaders > 1) {
|
||||
utils.logEvents(currentEvents);
|
||||
throw new Error("Unexpected relay chain header import: " + newGrandpaHeaders + " / " + messageTransactions);
|
||||
}
|
||||
|
||||
// ...and at most one parachain header
|
||||
const newParachainHeaders = utils.countParachainHeaderImports(bridgedChain, currentEvents);
|
||||
if (newParachainHeaders > 1) {
|
||||
utils.logEvents(currentEvents);
|
||||
throw new Error("Unexpected parachain header import: " + newParachainHeaders + " / " + messageTransactions);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// wait until we have received + delivered messages OR until timeout
|
||||
await utils.pollUntil(
|
||||
exitAfterSeconds,
|
||||
() => { return atLeastOneMessageReceived && atLeastOneMessageDelivered; },
|
||||
() => { unsubscribe(); },
|
||||
() => {
|
||||
if (!atLeastOneMessageReceived) {
|
||||
throw new Error("No messages received from bridged chain");
|
||||
}
|
||||
if (!atLeastOneMessageDelivered) {
|
||||
throw new Error("No messages delivered to bridged chain");
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = { run }
|
||||
@@ -1,28 +0,0 @@
|
||||
async function run(nodeName, networkInfo, args) {
|
||||
const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
|
||||
const api = await zombie.connect(wsUri, userDefinedTypes);
|
||||
|
||||
// TODO: could be replaced with https://github.com/polkadot-js/api/issues/4930 (depends on metadata v15) later
|
||||
const relayerAccountAddress = args[0];
|
||||
const laneId = args[1];
|
||||
const bridgedChainId = args[2];
|
||||
const relayerFundOwner = args[3];
|
||||
const expectedRelayerReward = BigInt(args[4]);
|
||||
while (true) {
|
||||
const relayerReward = await api.query.bridgeRelayers.relayerRewards(
|
||||
relayerAccountAddress,
|
||||
{ laneId: laneId, bridgedChainId: bridgedChainId, owner: relayerFundOwner }
|
||||
);
|
||||
if (relayerReward.isSome) {
|
||||
const relayerRewardBalance = relayerReward.unwrap().toBigInt();
|
||||
if (relayerRewardBalance > expectedRelayerReward) {
|
||||
return relayerRewardBalance;
|
||||
}
|
||||
}
|
||||
|
||||
// else sleep and retry
|
||||
await new Promise((resolve) => setTimeout(resolve, 6000));
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { run }
|
||||
@@ -1,103 +0,0 @@
|
||||
module.exports = {
|
||||
logEvents: function(events) {
|
||||
let stringifiedEvents = "";
|
||||
events.forEach((record) => {
|
||||
if (stringifiedEvents != "") {
|
||||
stringifiedEvents += ", ";
|
||||
}
|
||||
stringifiedEvents += record.event.section + "::" + record.event.method;
|
||||
});
|
||||
console.log("Block events: " + stringifiedEvents);
|
||||
},
|
||||
countGrandpaHeaderImports: function(bridgedChain, events) {
|
||||
return events.reduce(
|
||||
(count, record) => {
|
||||
const { event } = record;
|
||||
if (event.section == bridgedChain.grandpaPalletName && event.method == "UpdatedBestFinalizedHeader") {
|
||||
count += 1;
|
||||
}
|
||||
return count;
|
||||
},
|
||||
0,
|
||||
);
|
||||
},
|
||||
countParachainHeaderImports: function(bridgedChain, events) {
|
||||
return events.reduce(
|
||||
(count, record) => {
|
||||
const { event } = record;
|
||||
if (event.section == bridgedChain.parachainsPalletName && event.method == "UpdatedParachainHead") {
|
||||
count += 1;
|
||||
}
|
||||
return count;
|
||||
},
|
||||
0,
|
||||
);
|
||||
},
|
||||
pollUntil: async function(
|
||||
timeoutInSecs,
|
||||
predicate,
|
||||
cleanup,
|
||||
onFailure,
|
||||
) {
|
||||
const begin = new Date().getTime();
|
||||
const end = begin + timeoutInSecs * 1000;
|
||||
while (new Date().getTime() < end) {
|
||||
if (predicate()) {
|
||||
cleanup();
|
||||
return;
|
||||
}
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
}
|
||||
|
||||
cleanup();
|
||||
onFailure();
|
||||
},
|
||||
ensureOnlyMandatoryGrandpaHeadersImported: async function(
|
||||
bridgedChain,
|
||||
apiAtParent,
|
||||
apiAtCurrent,
|
||||
currentEvents,
|
||||
) {
|
||||
// remember id of bridged relay chain GRANDPA authorities set at parent block
|
||||
const authoritySetAtParent = await apiAtParent.query[bridgedChain.grandpaPalletName].currentAuthoritySet();
|
||||
const authoritySetIdAtParent = authoritySetAtParent["setId"];
|
||||
|
||||
// now read the id of bridged relay chain GRANDPA authorities set at current block
|
||||
const authoritySetAtCurrent = await apiAtCurrent.query[bridgedChain.grandpaPalletName].currentAuthoritySet();
|
||||
const authoritySetIdAtCurrent = authoritySetAtCurrent["setId"];
|
||||
|
||||
// we expect to see no more than `authoritySetIdAtCurrent - authoritySetIdAtParent` new GRANDPA headers
|
||||
const maxNewGrandpaHeaders = authoritySetIdAtCurrent - authoritySetIdAtParent;
|
||||
const newGrandpaHeaders = module.exports.countGrandpaHeaderImports(bridgedChain, currentEvents);
|
||||
|
||||
// check that our assumptions are correct
|
||||
if (newGrandpaHeaders > maxNewGrandpaHeaders) {
|
||||
module.exports.logEvents(currentEvents);
|
||||
throw new Error("Unexpected relay chain header import: " + newGrandpaHeaders + " / " + maxNewGrandpaHeaders);
|
||||
}
|
||||
|
||||
return newGrandpaHeaders;
|
||||
},
|
||||
ensureOnlyInitialParachainHeaderImported: async function(
|
||||
bridgedChain,
|
||||
apiAtParent,
|
||||
apiAtCurrent,
|
||||
currentEvents,
|
||||
) {
|
||||
// remember whether we already know bridged parachain header at a parent block
|
||||
const bestBridgedParachainHeader = await apiAtParent.query[bridgedChain.parachainsPalletName].parasInfo(bridgedChain.bridgedBridgeHubParaId);;
|
||||
const hasBestBridgedParachainHeader = bestBridgedParachainHeader.isSome;
|
||||
|
||||
// we expect to see: no more than `1` bridged parachain header if there were no parachain header before.
|
||||
const maxNewParachainHeaders = hasBestBridgedParachainHeader ? 0 : 1;
|
||||
const newParachainHeaders = module.exports.countParachainHeaderImports(bridgedChain, currentEvents);
|
||||
|
||||
// check that our assumptions are correct
|
||||
if (newParachainHeaders > maxNewParachainHeaders) {
|
||||
module.exports.logEvents(currentEvents);
|
||||
throw new Error("Unexpected parachain header import: " + newParachainHeaders + " / " + maxNewParachainHeaders);
|
||||
}
|
||||
|
||||
return hasBestBridgedParachainHeader;
|
||||
},
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
async function run(nodeName, networkInfo, args) {
|
||||
const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
|
||||
const api = await zombie.connect(wsUri, userDefinedTypes);
|
||||
|
||||
const sibling = args[0];
|
||||
|
||||
while (true) {
|
||||
const messagingStateAsObj = await api.query.parachainSystem.relevantMessagingState();
|
||||
const messagingState = api.createType("Option<CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot>", messagingStateAsObj);
|
||||
if (messagingState.isSome) {
|
||||
const egressChannels = messagingState.unwrap().egressChannels;
|
||||
if (egressChannels.find(x => x[0] == sibling)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// else sleep and retry
|
||||
await new Promise((resolve) => setTimeout(resolve, 6000));
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { run }
|
||||
@@ -1,26 +0,0 @@
|
||||
async function run(nodeName, networkInfo, args) {
|
||||
const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
|
||||
const api = await zombie.connect(wsUri, userDefinedTypes);
|
||||
|
||||
// TODO: could be replaced with https://github.com/polkadot-js/api/issues/4930 (depends on metadata v15) later
|
||||
const accountAddress = args[0];
|
||||
const expectedForeignAssetBalance = BigInt(args[1]);
|
||||
const bridgedNetworkName = args[2];
|
||||
while (true) {
|
||||
const foreignAssetAccount = await api.query.foreignAssets.account(
|
||||
{ parents: 2, interior: { X1: { GlobalConsensus: bridgedNetworkName } } },
|
||||
accountAddress
|
||||
);
|
||||
if (foreignAssetAccount.isSome) {
|
||||
const foreignAssetAccountBalance = foreignAssetAccount.unwrap().balance.toBigInt();
|
||||
if (foreignAssetAccountBalance > expectedForeignAssetBalance) {
|
||||
return foreignAssetAccountBalance;
|
||||
}
|
||||
}
|
||||
|
||||
// else sleep and retry
|
||||
await new Promise((resolve) => setTimeout(resolve, 6000));
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { run }
|
||||
@@ -1,309 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
function relayer_path() {
|
||||
local default_path=~/local_bridge_testing/bin/substrate-relay
|
||||
local path="${SUBSTRATE_RELAY_BINARY:-$default_path}"
|
||||
echo "$path"
|
||||
}
|
||||
|
||||
function ensure_relayer() {
|
||||
local path=$(relayer_path)
|
||||
if [[ ! -f "$path" ]]; then
|
||||
echo " Required substrate-relay binary '$path' does not exist!"
|
||||
echo " You need to build it and copy to this location!"
|
||||
echo " Please, check ./parachains/runtimes/bridge-hubs/README.md (Prepare/Build/Deploy)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $path
|
||||
}
|
||||
|
||||
function ensure_polkadot_js_api() {
|
||||
if ! which polkadot-js-api &> /dev/null; then
|
||||
echo ''
|
||||
echo 'Required command `polkadot-js-api` not in PATH, please, install, e.g.:'
|
||||
echo "npm install -g @polkadot/api-cli@beta"
|
||||
echo " or"
|
||||
echo "yarn global add @polkadot/api-cli"
|
||||
echo ''
|
||||
exit 1
|
||||
fi
|
||||
if ! which jq &> /dev/null; then
|
||||
echo ''
|
||||
echo 'Required command `jq` not in PATH, please, install, e.g.:'
|
||||
echo "apt install -y jq"
|
||||
echo ''
|
||||
exit 1
|
||||
fi
|
||||
generate_hex_encoded_call_data "check" "--"
|
||||
local retVal=$?
|
||||
if [ $retVal -ne 0 ]; then
|
||||
echo ""
|
||||
echo ""
|
||||
echo "-------------------"
|
||||
echo "Installing (nodejs) sub module: ${BASH_SOURCE%/*}/generate_hex_encoded_call"
|
||||
pushd ${BASH_SOURCE%/*}/generate_hex_encoded_call
|
||||
npm install
|
||||
popd
|
||||
fi
|
||||
}
|
||||
|
||||
function call_polkadot_js_api() {
|
||||
# --noWait: without that argument `polkadot-js-api` waits until transaction is included into the block.
|
||||
# With it, it just submits it to the tx pool and exits.
|
||||
# --nonce -1: means to compute transaction nonce using `system_accountNextIndex` RPC, which includes all
|
||||
# transaction that are in the tx pool.
|
||||
polkadot-js-api --noWait --nonce -1 "$@"
|
||||
}
|
||||
|
||||
function generate_hex_encoded_call_data() {
|
||||
local type=$1
|
||||
local endpoint=$2
|
||||
local output=$3
|
||||
shift
|
||||
shift
|
||||
shift
|
||||
echo "Input params: $@"
|
||||
|
||||
node ${BASH_SOURCE%/*}/../utils/generate_hex_encoded_call "$type" "$endpoint" "$output" "$@"
|
||||
local retVal=$?
|
||||
|
||||
if [ $type != "check" ]; then
|
||||
local hex_encoded_data=$(cat $output)
|
||||
echo "Generated hex-encoded bytes to file '$output': $hex_encoded_data"
|
||||
fi
|
||||
|
||||
return $retVal
|
||||
}
|
||||
|
||||
function transfer_balance() {
|
||||
local runtime_para_endpoint=$1
|
||||
local seed=$2
|
||||
local target_account=$3
|
||||
local amount=$4
|
||||
echo " calling transfer_balance:"
|
||||
echo " runtime_para_endpoint: ${runtime_para_endpoint}"
|
||||
echo " seed: ${seed}"
|
||||
echo " target_account: ${target_account}"
|
||||
echo " amount: ${amount}"
|
||||
echo "--------------------------------------------------"
|
||||
|
||||
call_polkadot_js_api \
|
||||
--ws "${runtime_para_endpoint}" \
|
||||
--seed "${seed?}" \
|
||||
tx.balances.transferAllowDeath \
|
||||
"${target_account}" \
|
||||
"${amount}"
|
||||
}
|
||||
|
||||
function send_governance_transact() {
|
||||
local relay_url=$1
|
||||
local relay_chain_seed=$2
|
||||
local para_id=$3
|
||||
local hex_encoded_data=$4
|
||||
local require_weight_at_most_ref_time=$5
|
||||
local require_weight_at_most_proof_size=$6
|
||||
echo " calling send_governance_transact:"
|
||||
echo " relay_url: ${relay_url}"
|
||||
echo " relay_chain_seed: ${relay_chain_seed}"
|
||||
echo " para_id: ${para_id}"
|
||||
echo " hex_encoded_data: ${hex_encoded_data}"
|
||||
echo " require_weight_at_most_ref_time: ${require_weight_at_most_ref_time}"
|
||||
echo " require_weight_at_most_proof_size: ${require_weight_at_most_proof_size}"
|
||||
echo " params:"
|
||||
|
||||
local dest=$(jq --null-input \
|
||||
--arg para_id "$para_id" \
|
||||
'{ "V3": { "parents": 0, "interior": { "X1": { "Parachain": $para_id } } } }')
|
||||
|
||||
local message=$(jq --null-input \
|
||||
--argjson hex_encoded_data $hex_encoded_data \
|
||||
--arg require_weight_at_most_ref_time "$require_weight_at_most_ref_time" \
|
||||
--arg require_weight_at_most_proof_size "$require_weight_at_most_proof_size" \
|
||||
'
|
||||
{
|
||||
"V3": [
|
||||
{
|
||||
"UnpaidExecution": {
|
||||
"weight_limit": "Unlimited"
|
||||
}
|
||||
},
|
||||
{
|
||||
"Transact": {
|
||||
"origin_kind": "Superuser",
|
||||
"require_weight_at_most": {
|
||||
"ref_time": $require_weight_at_most_ref_time,
|
||||
"proof_size": $require_weight_at_most_proof_size,
|
||||
},
|
||||
"call": {
|
||||
"encoded": $hex_encoded_data
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
')
|
||||
|
||||
echo ""
|
||||
echo " dest:"
|
||||
echo "${dest}"
|
||||
echo ""
|
||||
echo " message:"
|
||||
echo "${message}"
|
||||
echo ""
|
||||
echo "--------------------------------------------------"
|
||||
|
||||
call_polkadot_js_api \
|
||||
--ws "${relay_url?}" \
|
||||
--seed "${relay_chain_seed?}" \
|
||||
--sudo \
|
||||
tx.xcmPallet.send \
|
||||
"${dest}" \
|
||||
"${message}"
|
||||
}
|
||||
|
||||
function open_hrmp_channels() {
|
||||
local relay_url=$1
|
||||
local relay_chain_seed=$2
|
||||
local sender_para_id=$3
|
||||
local recipient_para_id=$4
|
||||
local max_capacity=$5
|
||||
local max_message_size=$6
|
||||
echo " calling open_hrmp_channels:"
|
||||
echo " relay_url: ${relay_url}"
|
||||
echo " relay_chain_seed: ${relay_chain_seed}"
|
||||
echo " sender_para_id: ${sender_para_id}"
|
||||
echo " recipient_para_id: ${recipient_para_id}"
|
||||
echo " max_capacity: ${max_capacity}"
|
||||
echo " max_message_size: ${max_message_size}"
|
||||
echo " params:"
|
||||
echo "--------------------------------------------------"
|
||||
call_polkadot_js_api \
|
||||
--ws "${relay_url?}" \
|
||||
--seed "${relay_chain_seed?}" \
|
||||
--sudo \
|
||||
tx.hrmp.forceOpenHrmpChannel \
|
||||
${sender_para_id} \
|
||||
${recipient_para_id} \
|
||||
${max_capacity} \
|
||||
${max_message_size}
|
||||
}
|
||||
|
||||
function force_xcm_version() {
|
||||
local relay_url=$1
|
||||
local relay_chain_seed=$2
|
||||
local runtime_para_id=$3
|
||||
local runtime_para_endpoint=$4
|
||||
local dest=$5
|
||||
local xcm_version=$6
|
||||
echo " calling force_xcm_version:"
|
||||
echo " relay_url: ${relay_url}"
|
||||
echo " relay_chain_seed: ${relay_chain_seed}"
|
||||
echo " runtime_para_id: ${runtime_para_id}"
|
||||
echo " runtime_para_endpoint: ${runtime_para_endpoint}"
|
||||
echo " dest: ${dest}"
|
||||
echo " xcm_version: ${xcm_version}"
|
||||
echo " params:"
|
||||
|
||||
# 1. generate data for Transact (PolkadotXcm::force_xcm_version)
|
||||
local tmp_output_file=$(mktemp)
|
||||
generate_hex_encoded_call_data "force-xcm-version" "${runtime_para_endpoint}" "${tmp_output_file}" "$dest" "$xcm_version"
|
||||
local hex_encoded_data=$(cat $tmp_output_file)
|
||||
|
||||
# 2. trigger governance call
|
||||
send_governance_transact "${relay_url}" "${relay_chain_seed}" "${runtime_para_id}" "${hex_encoded_data}" 200000000 12000
|
||||
}
|
||||
|
||||
function force_create_foreign_asset() {
|
||||
local relay_url=$1
|
||||
local relay_chain_seed=$2
|
||||
local runtime_para_id=$3
|
||||
local runtime_para_endpoint=$4
|
||||
local asset_multilocation=$5
|
||||
local asset_owner_account_id=$6
|
||||
local min_balance=$7
|
||||
local is_sufficient=$8
|
||||
echo " calling force_create_foreign_asset:"
|
||||
echo " relay_url: ${relay_url}"
|
||||
echo " relay_chain_seed: ${relay_chain_seed}"
|
||||
echo " runtime_para_id: ${runtime_para_id}"
|
||||
echo " runtime_para_endpoint: ${runtime_para_endpoint}"
|
||||
echo " asset_multilocation: ${asset_multilocation}"
|
||||
echo " asset_owner_account_id: ${asset_owner_account_id}"
|
||||
echo " min_balance: ${min_balance}"
|
||||
echo " is_sufficient: ${is_sufficient}"
|
||||
echo " params:"
|
||||
|
||||
# 1. generate data for Transact (ForeignAssets::force_create)
|
||||
local tmp_output_file=$(mktemp)
|
||||
generate_hex_encoded_call_data "force-create-asset" "${runtime_para_endpoint}" "${tmp_output_file}" "$asset_multilocation" "$asset_owner_account_id" $is_sufficient $min_balance
|
||||
local hex_encoded_data=$(cat $tmp_output_file)
|
||||
|
||||
# 2. trigger governance call
|
||||
send_governance_transact "${relay_url}" "${relay_chain_seed}" "${runtime_para_id}" "${hex_encoded_data}" 200000000 12000
|
||||
}
|
||||
|
||||
function limited_reserve_transfer_assets() {
|
||||
local url=$1
|
||||
local seed=$2
|
||||
local destination=$3
|
||||
local beneficiary=$4
|
||||
local assets=$5
|
||||
local fee_asset_item=$6
|
||||
local weight_limit=$7
|
||||
echo " calling limited_reserve_transfer_assets:"
|
||||
echo " url: ${url}"
|
||||
echo " seed: ${seed}"
|
||||
echo " destination: ${destination}"
|
||||
echo " beneficiary: ${beneficiary}"
|
||||
echo " assets: ${assets}"
|
||||
echo " fee_asset_item: ${fee_asset_item}"
|
||||
echo " weight_limit: ${weight_limit}"
|
||||
echo ""
|
||||
echo "--------------------------------------------------"
|
||||
|
||||
call_polkadot_js_api \
|
||||
--ws "${url?}" \
|
||||
--seed "${seed?}" \
|
||||
tx.polkadotXcm.limitedReserveTransferAssets \
|
||||
"${destination}" \
|
||||
"${beneficiary}" \
|
||||
"${assets}" \
|
||||
"${fee_asset_item}" \
|
||||
"${weight_limit}"
|
||||
}
|
||||
|
||||
function claim_rewards() {
|
||||
local runtime_para_endpoint=$1
|
||||
local seed=$2
|
||||
local lane_id=$3
|
||||
local bridged_chain_id=$4
|
||||
local owner=$5
|
||||
echo " calling claim_rewards:"
|
||||
echo " runtime_para_endpoint: ${runtime_para_endpoint}"
|
||||
echo " seed: ${seed}"
|
||||
echo " lane_id: ${lane_id}"
|
||||
echo " bridged_chain_id: ${bridged_chain_id}"
|
||||
echo " owner: ${owner}"
|
||||
echo ""
|
||||
|
||||
local rewards_account_params=$(jq --null-input \
|
||||
--arg lane_id "$lane_id" \
|
||||
--arg bridged_chain_id "$bridged_chain_id" \
|
||||
--arg owner "$owner" \
|
||||
'{
|
||||
"laneId": $lane_id,
|
||||
"bridgedChainId": $bridged_chain_id,
|
||||
"owner": $owner
|
||||
}')
|
||||
|
||||
echo " rewards_account_params:"
|
||||
echo "${rewards_account_params}"
|
||||
echo "--------------------------------------------------"
|
||||
|
||||
call_polkadot_js_api \
|
||||
--ws "${runtime_para_endpoint}" \
|
||||
--seed "${seed?}" \
|
||||
tx.bridgeRelayers.claimRewards \
|
||||
"${rewards_account_params}"
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
function start_background_process() {
|
||||
local command=$1
|
||||
local log_file=$2
|
||||
local __pid=$3
|
||||
|
||||
$command > $log_file 2>&1 &
|
||||
eval $__pid="'$!'"
|
||||
}
|
||||
|
||||
function wait_for_process_file() {
|
||||
local pid=$1
|
||||
local file=$2
|
||||
local timeout=$3
|
||||
local __found=$4
|
||||
|
||||
local time=0
|
||||
until [ -e $file ]; do
|
||||
if ! kill -0 $pid; then
|
||||
echo "Process finished unsuccessfully"
|
||||
return
|
||||
fi
|
||||
if (( time++ >= timeout )); then
|
||||
echo "Timeout waiting for file $file: $timeout seconds"
|
||||
eval $__found=0
|
||||
return
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "File $file found after $time seconds"
|
||||
eval $__found=1
|
||||
}
|
||||
|
||||
function ensure_process_file() {
|
||||
local pid=$1
|
||||
local file=$2
|
||||
local timeout=$3
|
||||
|
||||
wait_for_process_file $pid $file $timeout file_found
|
||||
if [ "$file_found" != "1" ]; then
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
@@ -1,165 +0,0 @@
|
||||
const fs = require("fs");
|
||||
const { exit } = require("process");
|
||||
const { WsProvider, ApiPromise } = require("@polkadot/api");
|
||||
const util = require("@polkadot/util");
|
||||
|
||||
// connect to a substrate chain and return the api object
|
||||
async function connect(endpoint, types = {}) {
|
||||
const provider = new WsProvider(endpoint);
|
||||
const api = await ApiPromise.create({
|
||||
provider,
|
||||
types,
|
||||
throwOnConnect: false,
|
||||
});
|
||||
return api;
|
||||
}
|
||||
|
||||
function writeHexEncodedBytesToOutput(method, outputFile) {
|
||||
console.log("Payload (hex): ", method.toHex());
|
||||
console.log("Payload (bytes): ", Array.from(method.toU8a()));
|
||||
console.log("Payload (plain): ", JSON.stringify(method));
|
||||
fs.writeFileSync(outputFile, JSON.stringify(Array.from(method.toU8a())));
|
||||
}
|
||||
|
||||
function remarkWithEvent(endpoint, outputFile) {
|
||||
console.log(`Generating remarkWithEvent from RPC endpoint: ${endpoint} to outputFile: ${outputFile}`);
|
||||
connect(endpoint)
|
||||
.then((api) => {
|
||||
const call = api.tx.system.remarkWithEvent("Hello");
|
||||
writeHexEncodedBytesToOutput(call.method, outputFile);
|
||||
exit(0);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
function addExporterConfig(endpoint, outputFile, bridgedNetwork, bridgeConfig) {
|
||||
console.log(`Generating addExporterConfig from RPC endpoint: ${endpoint} to outputFile: ${outputFile} based on bridgedNetwork: ${bridgedNetwork}, bridgeConfig: ${bridgeConfig}`);
|
||||
connect(endpoint)
|
||||
.then((api) => {
|
||||
const call = api.tx.bridgeTransfer.addExporterConfig(bridgedNetwork, JSON.parse(bridgeConfig));
|
||||
writeHexEncodedBytesToOutput(call.method, outputFile);
|
||||
exit(0);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
function addUniversalAlias(endpoint, outputFile, location, junction) {
|
||||
console.log(`Generating addUniversalAlias from RPC endpoint: ${endpoint} to outputFile: ${outputFile} based on location: ${location}, junction: ${junction}`);
|
||||
connect(endpoint)
|
||||
.then((api) => {
|
||||
const call = api.tx.bridgeTransfer.addUniversalAlias(JSON.parse(location), JSON.parse(junction));
|
||||
writeHexEncodedBytesToOutput(call.method, outputFile);
|
||||
exit(0);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
function addReserveLocation(endpoint, outputFile, reserve_location) {
|
||||
console.log(`Generating addReserveLocation from RPC endpoint: ${endpoint} to outputFile: ${outputFile} based on reserve_location: ${reserve_location}`);
|
||||
connect(endpoint)
|
||||
.then((api) => {
|
||||
const call = api.tx.bridgeTransfer.addReserveLocation(JSON.parse(reserve_location));
|
||||
writeHexEncodedBytesToOutput(call.method, outputFile);
|
||||
exit(0);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
function removeExporterConfig(endpoint, outputFile, bridgedNetwork) {
|
||||
console.log(`Generating removeExporterConfig from RPC endpoint: ${endpoint} to outputFile: ${outputFile} based on bridgedNetwork: ${bridgedNetwork}`);
|
||||
connect(endpoint)
|
||||
.then((api) => {
|
||||
const call = api.tx.bridgeTransfer.removeExporterConfig(bridgedNetwork);
|
||||
writeHexEncodedBytesToOutput(call.method, outputFile);
|
||||
exit(0);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
function forceCreateAsset(endpoint, outputFile, assetId, assetOwnerAccountId, isSufficient, minBalance) {
|
||||
var isSufficient = isSufficient == "true" ? true : false;
|
||||
console.log(`Generating forceCreateAsset from RPC endpoint: ${endpoint} to outputFile: ${outputFile} based on assetId: ${assetId}, assetOwnerAccountId: ${assetOwnerAccountId}, isSufficient: ${isSufficient}, minBalance: ${minBalance}`);
|
||||
connect(endpoint)
|
||||
.then((api) => {
|
||||
const call = api.tx.foreignAssets.forceCreate(JSON.parse(assetId), assetOwnerAccountId, isSufficient, minBalance);
|
||||
writeHexEncodedBytesToOutput(call.method, outputFile);
|
||||
exit(0);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
function forceXcmVersion(endpoint, outputFile, dest, xcm_version) {
|
||||
console.log(`Generating forceXcmVersion from RPC endpoint: ${endpoint} to outputFile: ${outputFile}, dest: ${dest}, xcm_version: ${xcm_version}`);
|
||||
connect(endpoint)
|
||||
.then((api) => {
|
||||
const call = api.tx.polkadotXcm.forceXcmVersion(JSON.parse(dest), xcm_version);
|
||||
writeHexEncodedBytesToOutput(call.method, outputFile);
|
||||
exit(0);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
if (!process.argv[2] || !process.argv[3]) {
|
||||
console.log("usage: node ./script/generate_hex_encoded_call <type> <endpoint> <output hex-encoded data file> <input message>");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
const type = process.argv[2];
|
||||
const rpcEndpoint = process.argv[3];
|
||||
const output = process.argv[4];
|
||||
const inputArgs = process.argv.slice(5, process.argv.length);
|
||||
console.log(`Generating hex-encoded call data for:`);
|
||||
console.log(` type: ${type}`);
|
||||
console.log(` rpcEndpoint: ${rpcEndpoint}`);
|
||||
console.log(` output: ${output}`);
|
||||
console.log(` inputArgs: ${inputArgs}`);
|
||||
|
||||
switch (type) {
|
||||
case 'remark-with-event':
|
||||
remarkWithEvent(rpcEndpoint, output);
|
||||
break;
|
||||
case 'add-exporter-config':
|
||||
addExporterConfig(rpcEndpoint, output, inputArgs[0], inputArgs[1]);
|
||||
break;
|
||||
case 'remove-exporter-config':
|
||||
removeExporterConfig(rpcEndpoint, output, inputArgs[0], inputArgs[1]);
|
||||
break;
|
||||
case 'add-universal-alias':
|
||||
addUniversalAlias(rpcEndpoint, output, inputArgs[0], inputArgs[1]);
|
||||
break;
|
||||
case 'add-reserve-location':
|
||||
addReserveLocation(rpcEndpoint, output, inputArgs[0]);
|
||||
break;
|
||||
case 'force-create-asset':
|
||||
forceCreateAsset(rpcEndpoint, output, inputArgs[0], inputArgs[1], inputArgs[2], inputArgs[3]);
|
||||
break;
|
||||
case 'force-xcm-version':
|
||||
forceXcmVersion(rpcEndpoint, output, inputArgs[0], inputArgs[1]);
|
||||
break;
|
||||
case 'check':
|
||||
console.log(`Checking nodejs installation, if you see this everything is ready!`);
|
||||
break;
|
||||
default:
|
||||
console.log(`Sorry, we are out of ${type} - not yet supported!`);
|
||||
}
|
||||
-759
@@ -1,759 +0,0 @@
|
||||
{
|
||||
"name": "y",
|
||||
"version": "y",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "y",
|
||||
"version": "y",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@polkadot/api": "^10.11",
|
||||
"@polkadot/util": "^12.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@noble/curves": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz",
|
||||
"integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==",
|
||||
"dependencies": {
|
||||
"@noble/hashes": "1.3.3"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@noble/hashes": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz",
|
||||
"integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==",
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/api": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.11.2.tgz",
|
||||
"integrity": "sha512-AorCZxCWCoTtdbl4DPUZh+ACe/pbLIS1BkdQY0AFJuZllm0x/yWzjgampcPd5jQAA/O3iKShRBkZqj6Mk9yG/A==",
|
||||
"dependencies": {
|
||||
"@polkadot/api-augment": "10.11.2",
|
||||
"@polkadot/api-base": "10.11.2",
|
||||
"@polkadot/api-derive": "10.11.2",
|
||||
"@polkadot/keyring": "^12.6.2",
|
||||
"@polkadot/rpc-augment": "10.11.2",
|
||||
"@polkadot/rpc-core": "10.11.2",
|
||||
"@polkadot/rpc-provider": "10.11.2",
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/types-augment": "10.11.2",
|
||||
"@polkadot/types-codec": "10.11.2",
|
||||
"@polkadot/types-create": "10.11.2",
|
||||
"@polkadot/types-known": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"@polkadot/util-crypto": "^12.6.2",
|
||||
"eventemitter3": "^5.0.1",
|
||||
"rxjs": "^7.8.1",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/api-augment": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-10.11.2.tgz",
|
||||
"integrity": "sha512-PTpnqpezc75qBqUtgrc0GYB8h9UHjfbHSRZamAbecIVAJ2/zc6CqtnldeaBlIu1IKTgBzi3FFtTyYu+ZGbNT2Q==",
|
||||
"dependencies": {
|
||||
"@polkadot/api-base": "10.11.2",
|
||||
"@polkadot/rpc-augment": "10.11.2",
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/types-augment": "10.11.2",
|
||||
"@polkadot/types-codec": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/api-base": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-10.11.2.tgz",
|
||||
"integrity": "sha512-4LIjaUfO9nOzilxo7XqzYKCNMtmUypdk8oHPdrRnSjKEsnK7vDsNi+979z2KXNXd2KFSCFHENmI523fYnMnReg==",
|
||||
"dependencies": {
|
||||
"@polkadot/rpc-core": "10.11.2",
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"rxjs": "^7.8.1",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/api-derive": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-10.11.2.tgz",
|
||||
"integrity": "sha512-m3BQbPionkd1iSlknddxnL2hDtolPIsT+aRyrtn4zgMRPoLjHFmTmovvg8RaUyYofJtZeYrnjMw0mdxiSXx7eA==",
|
||||
"dependencies": {
|
||||
"@polkadot/api": "10.11.2",
|
||||
"@polkadot/api-augment": "10.11.2",
|
||||
"@polkadot/api-base": "10.11.2",
|
||||
"@polkadot/rpc-core": "10.11.2",
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/types-codec": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"@polkadot/util-crypto": "^12.6.2",
|
||||
"rxjs": "^7.8.1",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/keyring": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz",
|
||||
"integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==",
|
||||
"dependencies": {
|
||||
"@polkadot/util": "12.6.2",
|
||||
"@polkadot/util-crypto": "12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "12.6.2",
|
||||
"@polkadot/util-crypto": "12.6.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/networks": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-12.6.2.tgz",
|
||||
"integrity": "sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==",
|
||||
"dependencies": {
|
||||
"@polkadot/util": "12.6.2",
|
||||
"@substrate/ss58-registry": "^1.44.0",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/rpc-augment": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-10.11.2.tgz",
|
||||
"integrity": "sha512-9AhT0WW81/8jYbRcAC6PRmuxXqNhJje8OYiulBQHbG1DTCcjAfz+6VQBke9BwTStzPq7d526+yyBKD17O3zlAA==",
|
||||
"dependencies": {
|
||||
"@polkadot/rpc-core": "10.11.2",
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/types-codec": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/rpc-core": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-10.11.2.tgz",
|
||||
"integrity": "sha512-Ot0CFLWx8sZhLZog20WDuniPA01Bk2StNDsdAQgcFKPwZw6ShPaZQCHuKLQK6I6DodOrem9FXX7c1hvoKJP5Ww==",
|
||||
"dependencies": {
|
||||
"@polkadot/rpc-augment": "10.11.2",
|
||||
"@polkadot/rpc-provider": "10.11.2",
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"rxjs": "^7.8.1",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/rpc-provider": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-10.11.2.tgz",
|
||||
"integrity": "sha512-he5jWMpDJp7e+vUzTZDzpkB7ps3H8psRally+/ZvZZScPvFEjfczT7I1WWY9h58s8+ImeVP/lkXjL9h/gUOt3Q==",
|
||||
"dependencies": {
|
||||
"@polkadot/keyring": "^12.6.2",
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/types-support": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"@polkadot/util-crypto": "^12.6.2",
|
||||
"@polkadot/x-fetch": "^12.6.2",
|
||||
"@polkadot/x-global": "^12.6.2",
|
||||
"@polkadot/x-ws": "^12.6.2",
|
||||
"eventemitter3": "^5.0.1",
|
||||
"mock-socket": "^9.3.1",
|
||||
"nock": "^13.4.0",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@substrate/connect": "0.7.35"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/types": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/types/-/types-10.11.2.tgz",
|
||||
"integrity": "sha512-d52j3xXni+C8GdYZVTSfu8ROAnzXFMlyRvXtor0PudUc8UQHOaC4+mYAkTBGA2gKdmL8MHSfRSbhcxHhsikY6Q==",
|
||||
"dependencies": {
|
||||
"@polkadot/keyring": "^12.6.2",
|
||||
"@polkadot/types-augment": "10.11.2",
|
||||
"@polkadot/types-codec": "10.11.2",
|
||||
"@polkadot/types-create": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"@polkadot/util-crypto": "^12.6.2",
|
||||
"rxjs": "^7.8.1",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/types-augment": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-10.11.2.tgz",
|
||||
"integrity": "sha512-8eB8ew04wZiE5GnmFvEFW1euJWmF62SGxb1O+8wL3zoUtB9Xgo1vB6w6xbTrd+HLV6jNSeXXnbbF1BEUvi9cNg==",
|
||||
"dependencies": {
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/types-codec": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/types-codec": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-10.11.2.tgz",
|
||||
"integrity": "sha512-3xjOQL+LOOMzYqlgP9ROL0FQnzU8lGflgYewzau7AsDlFziSEtb49a9BpYo6zil4koC+QB8zQ9OHGFumG08T8w==",
|
||||
"dependencies": {
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"@polkadot/x-bigint": "^12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/types-create": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-10.11.2.tgz",
|
||||
"integrity": "sha512-SJt23NxYvefRxVZZm6mT9ed1pR6FDoIGQ3xUpbjhTLfU2wuhpKjekMVorYQ6z/gK2JLMu2kV92Ardsz+6GX5XQ==",
|
||||
"dependencies": {
|
||||
"@polkadot/types-codec": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/types-known": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-10.11.2.tgz",
|
||||
"integrity": "sha512-kbEIX7NUQFxpDB0FFGNyXX/odY7jbp56RGD+Z4A731fW2xh/DgAQrI994xTzuh0c0EqPE26oQm3kATSpseqo9w==",
|
||||
"dependencies": {
|
||||
"@polkadot/networks": "^12.6.2",
|
||||
"@polkadot/types": "10.11.2",
|
||||
"@polkadot/types-codec": "10.11.2",
|
||||
"@polkadot/types-create": "10.11.2",
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/types-support": {
|
||||
"version": "10.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-10.11.2.tgz",
|
||||
"integrity": "sha512-X11hoykFYv/3efg4coZy2hUOUc97JhjQMJLzDhHniFwGLlYU8MeLnPdCVGkXx0xDDjTo4/ptS1XpZ5HYcg+gRw==",
|
||||
"dependencies": {
|
||||
"@polkadot/util": "^12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/util": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz",
|
||||
"integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==",
|
||||
"dependencies": {
|
||||
"@polkadot/x-bigint": "12.6.2",
|
||||
"@polkadot/x-global": "12.6.2",
|
||||
"@polkadot/x-textdecoder": "12.6.2",
|
||||
"@polkadot/x-textencoder": "12.6.2",
|
||||
"@types/bn.js": "^5.1.5",
|
||||
"bn.js": "^5.2.1",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/util-crypto": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz",
|
||||
"integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==",
|
||||
"dependencies": {
|
||||
"@noble/curves": "^1.3.0",
|
||||
"@noble/hashes": "^1.3.3",
|
||||
"@polkadot/networks": "12.6.2",
|
||||
"@polkadot/util": "12.6.2",
|
||||
"@polkadot/wasm-crypto": "^7.3.2",
|
||||
"@polkadot/wasm-util": "^7.3.2",
|
||||
"@polkadot/x-bigint": "12.6.2",
|
||||
"@polkadot/x-randomvalues": "12.6.2",
|
||||
"@scure/base": "^1.1.5",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "12.6.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/wasm-bridge": {
|
||||
"version": "7.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz",
|
||||
"integrity": "sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==",
|
||||
"dependencies": {
|
||||
"@polkadot/wasm-util": "7.3.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "*",
|
||||
"@polkadot/x-randomvalues": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/wasm-crypto": {
|
||||
"version": "7.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz",
|
||||
"integrity": "sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==",
|
||||
"dependencies": {
|
||||
"@polkadot/wasm-bridge": "7.3.2",
|
||||
"@polkadot/wasm-crypto-asmjs": "7.3.2",
|
||||
"@polkadot/wasm-crypto-init": "7.3.2",
|
||||
"@polkadot/wasm-crypto-wasm": "7.3.2",
|
||||
"@polkadot/wasm-util": "7.3.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "*",
|
||||
"@polkadot/x-randomvalues": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/wasm-crypto-asmjs": {
|
||||
"version": "7.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz",
|
||||
"integrity": "sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/wasm-crypto-init": {
|
||||
"version": "7.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz",
|
||||
"integrity": "sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==",
|
||||
"dependencies": {
|
||||
"@polkadot/wasm-bridge": "7.3.2",
|
||||
"@polkadot/wasm-crypto-asmjs": "7.3.2",
|
||||
"@polkadot/wasm-crypto-wasm": "7.3.2",
|
||||
"@polkadot/wasm-util": "7.3.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "*",
|
||||
"@polkadot/x-randomvalues": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/wasm-crypto-wasm": {
|
||||
"version": "7.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz",
|
||||
"integrity": "sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==",
|
||||
"dependencies": {
|
||||
"@polkadot/wasm-util": "7.3.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/wasm-util": {
|
||||
"version": "7.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz",
|
||||
"integrity": "sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/x-bigint": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz",
|
||||
"integrity": "sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==",
|
||||
"dependencies": {
|
||||
"@polkadot/x-global": "12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/x-fetch": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz",
|
||||
"integrity": "sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==",
|
||||
"dependencies": {
|
||||
"@polkadot/x-global": "12.6.2",
|
||||
"node-fetch": "^3.3.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/x-global": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-12.6.2.tgz",
|
||||
"integrity": "sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/x-randomvalues": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz",
|
||||
"integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==",
|
||||
"dependencies": {
|
||||
"@polkadot/x-global": "12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "12.6.2",
|
||||
"@polkadot/wasm-util": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/x-textdecoder": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz",
|
||||
"integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==",
|
||||
"dependencies": {
|
||||
"@polkadot/x-global": "12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/x-textencoder": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz",
|
||||
"integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==",
|
||||
"dependencies": {
|
||||
"@polkadot/x-global": "12.6.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@polkadot/x-ws": {
|
||||
"version": "12.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-12.6.2.tgz",
|
||||
"integrity": "sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==",
|
||||
"dependencies": {
|
||||
"@polkadot/x-global": "12.6.2",
|
||||
"tslib": "^2.6.2",
|
||||
"ws": "^8.15.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@scure/base": {
|
||||
"version": "1.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz",
|
||||
"integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==",
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@substrate/connect": {
|
||||
"version": "0.7.35",
|
||||
"resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.35.tgz",
|
||||
"integrity": "sha512-Io8vkalbwaye+7yXfG1Nj52tOOoJln2bMlc7Q9Yy3vEWqZEVkgKmcPVzbwV0CWL3QD+KMPDA2Dnw/X7EdwgoLw==",
|
||||
"hasInstallScript": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@substrate/connect-extension-protocol": "^1.0.1",
|
||||
"smoldot": "2.0.7"
|
||||
}
|
||||
},
|
||||
"node_modules/@substrate/connect-extension-protocol": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz",
|
||||
"integrity": "sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg==",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/@substrate/ss58-registry": {
|
||||
"version": "1.44.0",
|
||||
"resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.44.0.tgz",
|
||||
"integrity": "sha512-7lQ/7mMCzVNSEfDS4BCqnRnKCFKpcOaPrxMeGTXHX1YQzM/m2BBHjbK2C3dJvjv7GYxMiaTq/HdWQj1xS6ss+A=="
|
||||
},
|
||||
"node_modules/@types/bn.js": {
|
||||
"version": "5.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz",
|
||||
"integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.10.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz",
|
||||
"integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==",
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
}
|
||||
},
|
||||
"node_modules/bn.js": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
|
||||
"integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="
|
||||
},
|
||||
"node_modules/data-uri-to-buffer": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
|
||||
"integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
|
||||
"engines": {
|
||||
"node": ">= 12"
|
||||
}
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||
"dependencies": {
|
||||
"ms": "2.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"supports-color": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/eventemitter3": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
|
||||
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
|
||||
},
|
||||
"node_modules/fetch-blob": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
|
||||
"integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/jimmywarting"
|
||||
},
|
||||
{
|
||||
"type": "paypal",
|
||||
"url": "https://paypal.me/jimmywarting"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"node-domexception": "^1.0.0",
|
||||
"web-streams-polyfill": "^3.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20 || >= 14.13"
|
||||
}
|
||||
},
|
||||
"node_modules/formdata-polyfill": {
|
||||
"version": "4.0.10",
|
||||
"resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
|
||||
"integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
|
||||
"dependencies": {
|
||||
"fetch-blob": "^3.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.20.0"
|
||||
}
|
||||
},
|
||||
"node_modules/json-stringify-safe": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
|
||||
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
|
||||
},
|
||||
"node_modules/mock-socket": {
|
||||
"version": "9.3.1",
|
||||
"resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz",
|
||||
"integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==",
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"node_modules/nock": {
|
||||
"version": "13.4.0",
|
||||
"resolved": "https://registry.npmjs.org/nock/-/nock-13.4.0.tgz",
|
||||
"integrity": "sha512-W8NVHjO/LCTNA64yxAPHV/K47LpGYcVzgKd3Q0n6owhwvD0Dgoterc25R4rnZbckJEb6Loxz1f5QMuJpJnbSyQ==",
|
||||
"dependencies": {
|
||||
"debug": "^4.1.0",
|
||||
"json-stringify-safe": "^5.0.1",
|
||||
"propagate": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13"
|
||||
}
|
||||
},
|
||||
"node_modules/node-domexception": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
|
||||
"integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/jimmywarting"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://paypal.me/jimmywarting"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=10.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
|
||||
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
|
||||
"dependencies": {
|
||||
"data-uri-to-buffer": "^4.0.0",
|
||||
"fetch-blob": "^3.1.4",
|
||||
"formdata-polyfill": "^4.0.10"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/node-fetch"
|
||||
}
|
||||
},
|
||||
"node_modules/propagate": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz",
|
||||
"integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==",
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/rxjs": {
|
||||
"version": "7.8.1",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
|
||||
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/smoldot": {
|
||||
"version": "2.0.7",
|
||||
"resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.7.tgz",
|
||||
"integrity": "sha512-VAOBqEen6vises36/zgrmAT1GWk2qE3X8AGnO7lmQFdskbKx8EovnwS22rtPAG+Y1Rk23/S22kDJUdPANyPkBA==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"ws": "^8.8.1"
|
||||
}
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
||||
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.26.5",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
|
||||
},
|
||||
"node_modules/web-streams-polyfill": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
|
||||
"integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "8.16.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
|
||||
"integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": ">=5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "y",
|
||||
"version": "y",
|
||||
"description": "create a scale hex-encoded call values from given message",
|
||||
"main": "index.js",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@polkadot/api": "^10.11",
|
||||
"@polkadot/util": "^12.6"
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
source "${BASH_SOURCE%/*}/common.sh"
|
||||
|
||||
function start_zombienet() {
|
||||
local test_dir=$1
|
||||
local definition_path=$2
|
||||
local __zombienet_dir=$3
|
||||
local __zombienet_pid=$4
|
||||
|
||||
local zombienet_name=`basename $definition_path .toml`
|
||||
local zombienet_dir=$test_dir/$zombienet_name
|
||||
eval $__zombienet_dir="'$zombienet_dir'"
|
||||
mkdir -p $zombienet_dir
|
||||
rm -rf $zombienet_dir
|
||||
|
||||
local logs_dir=$test_dir/logs
|
||||
mkdir -p $logs_dir
|
||||
local zombienet_log=$logs_dir/$zombienet_name.log
|
||||
|
||||
echo "Starting $zombienet_name zombienet. Logs available at: $zombienet_log"
|
||||
start_background_process \
|
||||
"$ZOMBIENET_BINARY spawn --dir $zombienet_dir --provider native $definition_path" \
|
||||
"$zombienet_log" zombienet_pid
|
||||
|
||||
ensure_process_file $zombienet_pid "$zombienet_dir/zombie.json" 180
|
||||
echo "$zombienet_name zombienet started successfully"
|
||||
|
||||
eval $__zombienet_pid="'$zombienet_pid'"
|
||||
}
|
||||
|
||||
function run_zndsl() {
|
||||
local zndsl_file=$1
|
||||
local zombienet_dir=$2
|
||||
|
||||
echo "Running $zndsl_file."
|
||||
$ZOMBIENET_BINARY test --dir $zombienet_dir --provider native $zndsl_file $zombienet_dir/zombie.json
|
||||
echo
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
trap 'kill -9 -$$ || echo "Environment already teared down"' SIGINT SIGTERM EXIT
|
||||
|
||||
test=$1
|
||||
shift
|
||||
|
||||
# whether to use paths for zombienet+bridges tests container or for local testing
|
||||
ZOMBIENET_DOCKER_PATHS=0
|
||||
while [ $# -ne 0 ]
|
||||
do
|
||||
arg="$1"
|
||||
case "$arg" in
|
||||
--docker)
|
||||
ZOMBIENET_DOCKER_PATHS=1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
export POLKADOT_SDK_PATH=`realpath ${BASH_SOURCE%/*}/../..`
|
||||
export FRAMEWORK_PATH=`realpath ${BASH_SOURCE%/*}/framework`
|
||||
|
||||
# set path to binaries
|
||||
if [ "$ZOMBIENET_DOCKER_PATHS" -eq 1 ]; then
|
||||
# otherwise zombienet uses some hardcoded paths
|
||||
unset RUN_IN_CONTAINER
|
||||
unset ZOMBIENET_IMAGE
|
||||
|
||||
export POLKADOT_BINARY=/usr/local/bin/polkadot
|
||||
export POLKADOT_PARACHAIN_BINARY=/usr/local/bin/polkadot-parachain
|
||||
|
||||
export ZOMBIENET_BINARY=/usr/local/bin/zombie
|
||||
export SUBSTRATE_RELAY_BINARY=/usr/local/bin/substrate-relay
|
||||
else
|
||||
export POLKADOT_BINARY=$POLKADOT_SDK_PATH/target/release/polkadot
|
||||
export POLKADOT_PARACHAIN_BINARY=$POLKADOT_SDK_PATH/target/release/polkadot-parachain
|
||||
|
||||
export ZOMBIENET_BINARY=~/local_bridge_testing/bin/zombienet-linux-x64
|
||||
export SUBSTRATE_RELAY_BINARY=~/local_bridge_testing/bin/substrate-relay
|
||||
fi
|
||||
|
||||
export TEST_DIR=`mktemp -d /tmp/bridges-tests-run-XXXXX`
|
||||
echo -e "Test folder: $TEST_DIR\n"
|
||||
|
||||
${BASH_SOURCE%/*}/tests/$test/run.sh
|
||||
@@ -1,138 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -x
|
||||
shopt -s nullglob
|
||||
|
||||
trap "trap - SIGINT SIGTERM EXIT && killall -q -9 substrate-relay && kill -- -$$" SIGINT SIGTERM EXIT
|
||||
|
||||
# run tests in range [TESTS_BEGIN; TESTS_END)
|
||||
TESTS_BEGIN=1
|
||||
TESTS_END=1000
|
||||
# whether to use paths for zombienet+bridges tests container or for local testing
|
||||
ZOMBIENET_DOCKER_PATHS=0
|
||||
while [ $# -ne 0 ]
|
||||
do
|
||||
arg="$1"
|
||||
case "$arg" in
|
||||
--docker)
|
||||
ZOMBIENET_DOCKER_PATHS=1
|
||||
;;
|
||||
--test)
|
||||
shift
|
||||
TESTS_BEGIN="$1"
|
||||
TESTS_END="$1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# assuming that we'll be using native provide && all processes will be executing locally
|
||||
# (we need absolute paths here, because they're used when scripts are called by zombienet from tmp folders)
|
||||
export POLKADOT_SDK_PATH=`realpath $(dirname "$0")/../..`
|
||||
export BRIDGE_TESTS_FOLDER=$POLKADOT_SDK_PATH/bridges/testing/tests
|
||||
|
||||
# set path to binaries
|
||||
if [ "$ZOMBIENET_DOCKER_PATHS" -eq 1 ]; then
|
||||
export POLKADOT_BINARY=/usr/local/bin/polkadot
|
||||
export POLKADOT_PARACHAIN_BINARY=/usr/local/bin/polkadot-parachain
|
||||
|
||||
export SUBSTRATE_RELAY_BINARY=/usr/local/bin/substrate-relay
|
||||
export ZOMBIENET_BINARY_PATH=/usr/local/bin/zombie
|
||||
else
|
||||
export POLKADOT_BINARY=$POLKADOT_SDK_PATH/target/release/polkadot
|
||||
export POLKADOT_PARACHAIN_BINARY=$POLKADOT_SDK_PATH/target/release/polkadot-parachain
|
||||
|
||||
export SUBSTRATE_RELAY_BINARY=~/local_bridge_testing/bin/substrate-relay
|
||||
export ZOMBIENET_BINARY_PATH=~/local_bridge_testing/bin/zombienet-linux
|
||||
fi
|
||||
|
||||
# check if `wait` supports -p flag
|
||||
if [ `printf "$BASH_VERSION\n5.1" | sort -V | head -n 1` = "5.1" ]; then IS_BASH_5_1=1; else IS_BASH_5_1=0; fi
|
||||
|
||||
# bridge configuration
|
||||
export LANE_ID="00000002"
|
||||
|
||||
# tests configuration
|
||||
ALL_TESTS_FOLDER=`mktemp -d /tmp/bridges-zombienet-tests.XXXXX`
|
||||
|
||||
function start_coproc() {
|
||||
local command=$1
|
||||
local name=$2
|
||||
local logname=`basename $name`
|
||||
local coproc_log=`mktemp -p $TEST_FOLDER $logname.XXXXX`
|
||||
coproc COPROC {
|
||||
# otherwise zombienet uses some hardcoded paths
|
||||
unset RUN_IN_CONTAINER
|
||||
unset ZOMBIENET_IMAGE
|
||||
|
||||
$command >$coproc_log 2>&1
|
||||
}
|
||||
TEST_COPROCS[$COPROC_PID, 0]=$name
|
||||
TEST_COPROCS[$COPROC_PID, 1]=$coproc_log
|
||||
echo "Spawned $name coprocess. StdOut + StdErr: $coproc_log"
|
||||
|
||||
return $COPROC_PID
|
||||
}
|
||||
|
||||
# execute every test from tests folder
|
||||
TEST_INDEX=$TESTS_BEGIN
|
||||
while true
|
||||
do
|
||||
declare -A TEST_COPROCS
|
||||
TEST_COPROCS_COUNT=0
|
||||
TEST_PREFIX=$(printf "%04d" $TEST_INDEX)
|
||||
|
||||
# it'll be used by the `sync-exit.sh` script
|
||||
export TEST_FOLDER=`mktemp -d -p $ALL_TESTS_FOLDER test-$TEST_PREFIX.XXXXX`
|
||||
|
||||
# check if there are no more tests
|
||||
zndsl_files=($BRIDGE_TESTS_FOLDER/$TEST_PREFIX-*.zndsl)
|
||||
if [ ${#zndsl_files[@]} -eq 0 ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
# start tests
|
||||
for zndsl_file in "${zndsl_files[@]}"; do
|
||||
start_coproc "$ZOMBIENET_BINARY_PATH --provider native test $zndsl_file" "$zndsl_file"
|
||||
echo -n "1">>$TEST_FOLDER/exit-sync
|
||||
((TEST_COPROCS_COUNT++))
|
||||
done
|
||||
# wait until all tests are completed
|
||||
for n in `seq 1 $TEST_COPROCS_COUNT`; do
|
||||
if [ "$IS_BASH_5_1" -eq 1 ]; then
|
||||
wait -n -p COPROC_PID
|
||||
exit_code=$?
|
||||
coproc_name=${TEST_COPROCS[$COPROC_PID, 0]}
|
||||
coproc_log=${TEST_COPROCS[$COPROC_PID, 1]}
|
||||
coproc_stdout=$(cat $coproc_log)
|
||||
else
|
||||
wait -n
|
||||
exit_code=$?
|
||||
coproc_name="<unknown>"
|
||||
coproc_stdout="<unknown>"
|
||||
fi
|
||||
echo "Process $coproc_name has finished with exit code: $exit_code"
|
||||
|
||||
# if exit code is not zero, exit
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
echo "====================================================================="
|
||||
echo "=== Shutting down. Log of failed process below ==="
|
||||
echo "====================================================================="
|
||||
echo "$coproc_stdout"
|
||||
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# proceed to next index
|
||||
((TEST_INDEX++))
|
||||
if [ "$TEST_INDEX" -ge "$TESTS_END" ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
# kill relay here - it is started manually by tests
|
||||
killall substrate-relay
|
||||
done
|
||||
|
||||
echo "====================================================================="
|
||||
echo "=== All tests have completed successfully ==="
|
||||
echo "====================================================================="
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
INVOKE_LOG=`mktemp -p $TEST_FOLDER invoke.XXXXX`
|
||||
|
||||
pushd $POLKADOT_SDK_PATH/bridges/testing/environments/rococo-westend
|
||||
./bridges_rococo_westend.sh $1 >$INVOKE_LOG 2>&1
|
||||
popd
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
RELAY_LOG=`mktemp -p $TEST_FOLDER relay.XXXXX`
|
||||
|
||||
pushd $POLKADOT_SDK_PATH/bridges/testing/environments/rococo-westend
|
||||
./bridges_rococo_westend.sh run-relay >$RELAY_LOG 2>&1&
|
||||
popd
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# every network adds a char to the file, let's remove ours
|
||||
truncate -s -1 $TEST_FOLDER/exit-sync
|
||||
|
||||
# when all chars are removed, then our test is done
|
||||
while true
|
||||
do
|
||||
if [ `stat --printf="%s" $TEST_FOLDER/exit-sync` -eq 0 ]; then
|
||||
exit
|
||||
fi
|
||||
sleep 100
|
||||
done
|
||||
@@ -1,12 +0,0 @@
|
||||
Description: User is able to transfer ROC from Rococo Asset Hub to Westend Asset Hub and back
|
||||
Network: {{ENV_PATH}}/bridge_hub_westend_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# send 5 ROC to //Alice from Rococo AH to Westend AH
|
||||
asset-hub-westend-collator1: run {{ENV_PATH}}/helper.sh with "reserve-transfer-assets-from-asset-hub-rococo-local 5000000000000" within 120 seconds
|
||||
|
||||
# check that //Alice received at least 4.8 ROC on Westend AH
|
||||
asset-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/wrapped-assets-balance.js with "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY,4800000000000,Rococo" within 600 seconds
|
||||
|
||||
# check that the relayer //Charlie is rewarded by Westend AH
|
||||
bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/relayer-rewards.js with "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y,0x00000002,0x6268726F,ThisChain,0" within 30 seconds
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
source "${BASH_SOURCE%/*}/../../framework/utils/common.sh"
|
||||
source "${BASH_SOURCE%/*}/../../framework/utils/zombienet.sh"
|
||||
|
||||
export ENV_PATH=`realpath ${BASH_SOURCE%/*}/../../environments/rococo-westend`
|
||||
|
||||
$ENV_PATH/spawn.sh --init --start-relayer &
|
||||
env_pid=$!
|
||||
|
||||
ensure_process_file $env_pid $TEST_DIR/rococo.env 600
|
||||
rococo_dir=`cat $TEST_DIR/rococo.env`
|
||||
echo
|
||||
|
||||
ensure_process_file $env_pid $TEST_DIR/westend.env 300
|
||||
westend_dir=`cat $TEST_DIR/westend.env`
|
||||
echo
|
||||
|
||||
run_zndsl ${BASH_SOURCE%/*}/roc-reaches-westend.zndsl $westend_dir
|
||||
run_zndsl ${BASH_SOURCE%/*}/wnd-reaches-rococo.zndsl $rococo_dir
|
||||
|
||||
run_zndsl ${BASH_SOURCE%/*}/wroc-reaches-rococo.zndsl $rococo_dir
|
||||
run_zndsl ${BASH_SOURCE%/*}/wwnd-reaches-westend.zndsl $westend_dir
|
||||
@@ -1,12 +0,0 @@
|
||||
Description: User is able to transfer WND from Westend Asset Hub to Rococo Asset Hub and back
|
||||
Network: {{ENV_PATH}}/bridge_hub_rococo_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# send 5 WND to //Alice from Westend AH to Rococo AH
|
||||
asset-hub-rococo-collator1: run {{ENV_PATH}}/helper.sh with "reserve-transfer-assets-from-asset-hub-westend-local 5000000000000" within 120 seconds
|
||||
|
||||
# check that //Alice received at least 4.8 WND on Rococo AH
|
||||
asset-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/wrapped-assets-balance.js with "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY,4800000000000,Westend" within 600 seconds
|
||||
|
||||
# check that the relayer //Charlie is rewarded by Rococo AH
|
||||
bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/relayer-rewards.js with "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y,0x00000002,0x62687764,ThisChain,0" within 30 seconds
|
||||
@@ -1,10 +0,0 @@
|
||||
Description: User is able to transfer ROC from Rococo Asset Hub to Westend Asset Hub and back
|
||||
Network: {{ENV_PATH}}/bridge_hub_westend_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# send 3 wROC back to Alice from Westend AH to Rococo AH
|
||||
asset-hub-rococo-collator1: run {{ENV_PATH}}/helper.sh with "withdraw-reserve-assets-from-asset-hub-westend-local 3000000000000" within 120 seconds
|
||||
|
||||
# check that //Alice received at least 2.8 wROC on Rococo AH
|
||||
# (we wait until //Alice account increases here - there are no other transactions that may increase it)
|
||||
asset-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-assets-balance-increased.js with "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY,2800000000000" within 600 seconds
|
||||
@@ -1,10 +0,0 @@
|
||||
Description: User is able to transfer ROC from Rococo Asset Hub to Westend Asset Hub and back
|
||||
Network: {{ENV_PATH}}/bridge_hub_westend_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# send 3 wWND back to Alice from Rococo AH to Westend AH
|
||||
asset-hub-westend-collator1: run {{ENV_PATH}}/helper.sh with "withdraw-reserve-assets-from-asset-hub-rococo-local 3000000000000" within 120 seconds
|
||||
|
||||
# check that //Alice received at least 2.8 wWND on Westend AH
|
||||
# (we wait until //Alice account increases here - there are no other transactions that may increase it)
|
||||
asset-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/native-assets-balance-increased.js with "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY,2800000000000" within 600 seconds
|
||||
@@ -1,8 +0,0 @@
|
||||
Description: While relayer is idle, we only sync mandatory Rococo (and a single Rococo BH) headers to Westend BH.
|
||||
Network: {{ENV_PATH}}/bridge_hub_westend_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# ensure that relayer is only syncing mandatory headers while idle. This includes both headers that were
|
||||
# generated while relay was offline and those in the next 100 seconds while script is active.
|
||||
bridge-hub-westend-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/only-mandatory-headers-synced-when-idle.js with "300,rococo-at-westend" within 600 seconds
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
source "${BASH_SOURCE%/*}/../../framework/utils/common.sh"
|
||||
source "${BASH_SOURCE%/*}/../../framework/utils/zombienet.sh"
|
||||
|
||||
export ENV_PATH=`realpath ${BASH_SOURCE%/*}/../../environments/rococo-westend`
|
||||
|
||||
$ENV_PATH/spawn.sh &
|
||||
env_pid=$!
|
||||
|
||||
ensure_process_file $env_pid $TEST_DIR/rococo.env 600
|
||||
rococo_dir=`cat $TEST_DIR/rococo.env`
|
||||
echo
|
||||
|
||||
ensure_process_file $env_pid $TEST_DIR/westend.env 300
|
||||
westend_dir=`cat $TEST_DIR/westend.env`
|
||||
echo
|
||||
|
||||
# Sleep for some time before starting the relayer. We want to sleep for at least 1 session,
|
||||
# which is expected to be 60 seconds for the test environment.
|
||||
echo -e "Sleeping 90s before starting relayer ...\n"
|
||||
sleep 90
|
||||
${BASH_SOURCE%/*}/../../environments/rococo-westend/start_relayer.sh $rococo_dir $westend_dir relayer_pid
|
||||
|
||||
# Sometimes the relayer syncs multiple parachain heads in the beginning leading to test failures.
|
||||
# See issue: https://github.com/paritytech/parity-bridges-common/issues/2838.
|
||||
# TODO: Remove this sleep after the issue is fixed.
|
||||
echo -e "Sleeping 180s before runing the tests ...\n"
|
||||
sleep 180
|
||||
|
||||
run_zndsl ${BASH_SOURCE%/*}/rococo-to-westend.zndsl $westend_dir
|
||||
run_zndsl ${BASH_SOURCE%/*}/westend-to-rococo.zndsl $rococo_dir
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
Description: While relayer is idle, we only sync mandatory Westend (and a single Westend BH) headers to Rococo BH.
|
||||
Network: {{ENV_PATH}}/bridge_hub_rococo_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# ensure that relayer is only syncing mandatory headers while idle. This includes both headers that were
|
||||
# generated while relay was offline and those in the next 100 seconds while script is active.
|
||||
bridge-hub-rococo-collator1: js-script {{FRAMEWORK_PATH}}/js-helpers/only-mandatory-headers-synced-when-idle.js with "300,westend-at-rococo" within 600 seconds
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
Description: While relayer is active, we only sync mandatory and required Rococo (and Rococo BH) headers to Westend BH.
|
||||
Network: ../environments/rococo-westend/bridge_hub_westend_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# step 1: initialize Westend AH
|
||||
asset-hub-westend-collator1: run ../scripts/invoke-script.sh with "init-asset-hub-westend-local" within 60 seconds
|
||||
|
||||
# step 2: initialize Westend bridge hub
|
||||
bridge-hub-westend-collator1: run ../scripts/invoke-script.sh with "init-bridge-hub-westend-local" within 60 seconds
|
||||
|
||||
# step 3: ensure that initialization has completed
|
||||
asset-hub-westend-collator1: js-script ../js-helpers/wait-hrmp-channel-opened.js with "1002" within 600 seconds
|
||||
|
||||
# step 4: send message from Westend to Rococo
|
||||
asset-hub-westend-collator1: run ../scripts/invoke-script.sh with "reserve-transfer-assets-from-asset-hub-westend-local" within 60 seconds
|
||||
|
||||
# step 5: start relayer
|
||||
# (we are starting it after sending the message to be sure that relayer won't relay messages before our js script
|
||||
# will be started at step 6)
|
||||
# (it is started by sibling 0003-required-headers-synced-while-active-westend-to-rococo.zndsl)
|
||||
|
||||
# step 6: ensure that relayer won't sync any extra headers while delivering messages and confirmations
|
||||
bridge-hub-westend-collator1: js-script ../js-helpers/only-required-headers-synced-when-active.js with "500,rococo-at-westend" within 600 seconds
|
||||
|
||||
# wait until other network test has completed OR exit with an error too
|
||||
asset-hub-westend-collator1: run ../scripts/sync-exit.sh within 600 seconds
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
Description: While relayer is active, we only sync mandatory and required Westend (and Westend BH) headers to Rococo BH.
|
||||
Network: ../environments/rococo-westend/bridge_hub_rococo_local_network.toml
|
||||
Creds: config
|
||||
|
||||
# step 1: initialize Rococo AH
|
||||
asset-hub-rococo-collator1: run ../scripts/invoke-script.sh with "init-asset-hub-rococo-local" within 60 seconds
|
||||
|
||||
# step 2: initialize Rococo bridge hub
|
||||
bridge-hub-rococo-collator1: run ../scripts/invoke-script.sh with "init-bridge-hub-rococo-local" within 60 seconds
|
||||
|
||||
# step 3: ensure that initialization has completed
|
||||
asset-hub-rococo-collator1: js-script ../js-helpers/wait-hrmp-channel-opened.js with "1013" within 600 seconds
|
||||
|
||||
# step 4: send message from Rococo to Westend
|
||||
asset-hub-rococo-collator1: run ../scripts/invoke-script.sh with "reserve-transfer-assets-from-asset-hub-rococo-local" within 60 seconds
|
||||
|
||||
# step 5: start relayer
|
||||
# (we are starting it after sending the message to be sure that relayer won't relay messages before our js script
|
||||
# will be started at step 6)
|
||||
bridge-hub-rococo-collator1: run ../scripts/start-relayer.sh within 60 seconds
|
||||
|
||||
# step 6: ensure that relayer won't sync any extra headers while delivering messages and confirmations
|
||||
bridge-hub-rococo-collator1: js-script ../js-helpers/only-required-headers-synced-when-active.js with "500,westend-at-rococo" within 600 seconds
|
||||
|
||||
# wait until other network test has completed OR exit with an error too
|
||||
asset-hub-rococo-collator1: run ../scripts/sync-exit.sh within 600 seconds
|
||||
Reference in New Issue
Block a user