90fd044766
- snowbridge-pezpallet-* → pezsnowbridge-pezpallet-* (201 refs) - pallet/ directories → pezpallet/ (4 locations) - Fixed pezpallet.rs self-include recursion bug - Fixed sc-chain-spec hardcoded crate name in derive macro - Reverted .pezpallet_by_name() to .pallet_by_name() (subxt API) - Added BizinikiwiConfig type alias for zombienet tests - Deleted obsolete session state files Verified: pezsnowbridge-pezpallet-*, pezpallet-staking, pezpallet-staking-async, pezframe-benchmarking-cli all pass cargo check
344 lines
12 KiB
Bash
Executable File
344 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
function relayer_path() {
|
|
local default_path=~/local_bridge_testing/bin/bizinikiwi-relay
|
|
local path="${BIZINIKIWI_RELAY_BINARY:-$default_path}"
|
|
echo "$path"
|
|
}
|
|
|
|
function ensure_relayer() {
|
|
local path=$(relayer_path)
|
|
if [[ ! -f "$path" ]]; then
|
|
echo " Required bizinikiwi-relay binary '$path' does not exist!"
|
|
echo " You need to build it and copy to this location!"
|
|
echo " Please, check ./teyrchains/runtimes/bridge-hubs/README.md (Prepare/Build/Deploy)"
|
|
exit 1
|
|
fi
|
|
|
|
echo $path
|
|
}
|
|
|
|
function ensure_pezkuwi_js_api() {
|
|
if ! which pezkuwi-js-api &> /dev/null; then
|
|
echo ''
|
|
echo 'Required command `pezkuwi-js-api` not in PATH, please, install, e.g.:'
|
|
echo "npm install -g @pezkuwi/api-cli@beta"
|
|
echo " or"
|
|
echo "yarn global add @pezkuwi/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_pezkuwi_js_api() {
|
|
# --noWait: without that argument `pezkuwi-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.
|
|
pezkuwi-js-api --nonce -1 "$@" || true
|
|
}
|
|
|
|
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_pezkuwi_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" \
|
|
'{ "V4": { "parents": 0, "interior": { "X1": [{ "Teyrchain": $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" \
|
|
'
|
|
{
|
|
"V4": [
|
|
{
|
|
"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_pezkuwi_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_pezkuwi_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 (PezkuwiXcm::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 create_pool() {
|
|
local runtime_para_endpoint=$1
|
|
local seed=$2
|
|
local native_asset_id=$3
|
|
local foreign_asset_id=$4
|
|
|
|
call_pezkuwi_js_api \
|
|
--ws "${runtime_para_endpoint?}" \
|
|
--seed "${seed?}" \
|
|
tx.assetConversion.createPool \
|
|
"${native_asset_id}" \
|
|
"${foreign_asset_id}"
|
|
}
|
|
|
|
function add_liquidity() {
|
|
local runtime_para_endpoint=$1
|
|
local seed=$2
|
|
local native_asset_id=$3
|
|
local foreign_asset_id=$4
|
|
local native_asset_amount=$5
|
|
local foreign_asset_amount=$6
|
|
local pool_owner_account_id=$7
|
|
|
|
call_pezkuwi_js_api \
|
|
--ws "${runtime_para_endpoint?}" \
|
|
--seed "${seed?}" \
|
|
tx.assetConversion.addLiquidity \
|
|
"${native_asset_id}" \
|
|
"${foreign_asset_id}" \
|
|
"${native_asset_amount}" \
|
|
"${foreign_asset_amount}" \
|
|
"1" \
|
|
"1" \
|
|
"${pool_owner_account_id}"
|
|
}
|
|
function limited_reserve_transfer_assets() {
|
|
local url=$1
|
|
local seed=$2
|
|
local destination=$3
|
|
local beneficiary=$4
|
|
local assets=$5
|
|
local fee_asset_id=$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_id: ${fee_asset_id}"
|
|
echo " weight_limit: ${weight_limit}"
|
|
echo ""
|
|
echo "--------------------------------------------------"
|
|
|
|
call_pezkuwi_js_api \
|
|
--ws "${url?}" \
|
|
--seed "${seed?}" \
|
|
tx.pezkuwiXcm.limitedReserveTransferAssets \
|
|
"${destination}" \
|
|
"${beneficiary}" \
|
|
"${assets}" \
|
|
"${fee_asset_id}" \
|
|
"${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_pezkuwi_js_api \
|
|
--ws "${runtime_para_endpoint}" \
|
|
--seed "${seed?}" \
|
|
tx.bridgeRelayers.claimRewards \
|
|
"${rewards_account_params}"
|
|
} |