diff --git a/.cargo/config.toml b/.cargo/config.toml
index 1b8ffe1a1c82..68a0d7b552dc 100644
--- a/.cargo/config.toml
+++ b/.cargo/config.toml
@@ -9,3 +9,7 @@ rustdocflags = [
CC_x86_64_unknown_linux_musl = { value = ".cargo/musl-gcc", force = true, relative = true }
CXX_x86_64_unknown_linux_musl = { value = ".cargo/musl-g++", force = true, relative = true }
CARGO_WORKSPACE_ROOT_DIR = { value = "", relative = true }
+
+[net]
+retry = 5
+# git-fetch-with-cli = true # commented because there is a risk that a runner can be banned by github
diff --git a/.github/env b/.github/env
index bb61e1f4cd99..730c37f1db80 100644
--- a/.github/env
+++ b/.github/env
@@ -1 +1 @@
-IMAGE="docker.io/paritytech/ci-unified:bullseye-1.81.0-2024-09-11-v202409111034"
+IMAGE="docker.io/paritytech/ci-unified:bullseye-1.81.0-2024-11-19-v202411281558"
diff --git a/.github/scripts/cmd/cmd.py b/.github/scripts/cmd/cmd.py
index 9da05cac17b9..2c017b7d0c3e 100755
--- a/.github/scripts/cmd/cmd.py
+++ b/.github/scripts/cmd/cmd.py
@@ -58,7 +58,7 @@ def setup_logging():
%(prog)s --runtime westend rococo --pallet pallet_balances pallet_multisig --quiet --clean
'''
-parser_bench = subparsers.add_parser('bench', help='Runs benchmarks', epilog=bench_example, formatter_class=argparse.RawDescriptionHelpFormatter)
+parser_bench = subparsers.add_parser('bench', help='Runs benchmarks (old CLI)', epilog=bench_example, formatter_class=argparse.RawDescriptionHelpFormatter)
for arg, config in common_args.items():
parser_bench.add_argument(arg, **config)
@@ -67,6 +67,35 @@ def setup_logging():
parser_bench.add_argument('--pallet', help='Pallet(s) space separated', nargs='*', default=[])
parser_bench.add_argument('--fail-fast', help='Fail fast on first failed benchmark', action='store_true')
+
+"""
+BENCH OMNI
+"""
+
+bench_example = '''**Examples**:
+ Runs all benchmarks
+ %(prog)s
+
+ Runs benchmarks for pallet_balances and pallet_multisig for all runtimes which have these pallets. **--quiet** makes it to output nothing to PR but reactions
+ %(prog)s --pallet pallet_balances pallet_xcm_benchmarks::generic --quiet
+
+ Runs bench for all pallets for westend runtime and fails fast on first failed benchmark
+ %(prog)s --runtime westend --fail-fast
+
+ Does not output anything and cleans up the previous bot's & author command triggering comments in PR
+ %(prog)s --runtime westend rococo --pallet pallet_balances pallet_multisig --quiet --clean
+'''
+
+parser_bench_old = subparsers.add_parser('bench-omni', help='Runs benchmarks (frame omni bencher)', epilog=bench_example, formatter_class=argparse.RawDescriptionHelpFormatter)
+
+for arg, config in common_args.items():
+ parser_bench_old.add_argument(arg, **config)
+
+parser_bench_old.add_argument('--runtime', help='Runtime(s) space separated', choices=runtimeNames, nargs='*', default=runtimeNames)
+parser_bench_old.add_argument('--pallet', help='Pallet(s) space separated', nargs='*', default=[])
+parser_bench_old.add_argument('--fail-fast', help='Fail fast on first failed benchmark', action='store_true')
+
+
"""
FMT
"""
@@ -98,12 +127,12 @@ def main():
print(f'args: {args}')
- if args.command == 'bench':
+ if args.command == 'bench-omni':
runtime_pallets_map = {}
failed_benchmarks = {}
successful_benchmarks = {}
- profile = "release"
+ profile = "production"
print(f'Provided runtimes: {args.runtime}')
# convert to mapped dict
@@ -113,11 +142,22 @@ def main():
# loop over remaining runtimes to collect available pallets
for runtime in runtimesMatrix.values():
- os.system(f"forklift cargo build -p {runtime['package']} --profile {profile} --features={runtime['bench_features']}")
+ build_command = f"forklift cargo build -p {runtime['package']} --profile {profile} --features={runtime['bench_features']}"
+ print(f'-- building "{runtime["name"]}" with `{build_command}`')
+ os.system(build_command)
print(f'-- listing pallets for benchmark for {runtime["name"]}')
wasm_file = f"target/{profile}/wbuild/{runtime['package']}/{runtime['package'].replace('-', '_')}.wasm"
- output = os.popen(
- f"frame-omni-bencher v1 benchmark pallet --no-csv-header --no-storage-info --no-min-squares --no-median-slopes --all --list --runtime={wasm_file} {runtime['bench_flags']}").read()
+ list_command = f"frame-omni-bencher v1 benchmark pallet " \
+ f"--no-csv-header " \
+ f"--no-storage-info " \
+ f"--no-min-squares " \
+ f"--no-median-slopes " \
+ f"--all " \
+ f"--list " \
+ f"--runtime={wasm_file} " \
+ f"{runtime['bench_flags']}"
+ print(f'-- running: {list_command}')
+ output = os.popen(list_command).read()
raw_pallets = output.strip().split('\n')
all_pallets = set()
@@ -230,6 +270,149 @@ def main():
print_and_log('✅ Successful benchmarks of runtimes/pallets:')
for runtime, pallets in successful_benchmarks.items():
print_and_log(f'-- {runtime}: {pallets}')
+
+ if args.command == 'bench':
+ runtime_pallets_map = {}
+ failed_benchmarks = {}
+ successful_benchmarks = {}
+
+ profile = "production"
+
+ print(f'Provided runtimes: {args.runtime}')
+ # convert to mapped dict
+ runtimesMatrix = list(filter(lambda x: x['name'] in args.runtime, runtimesMatrix))
+ runtimesMatrix = {x['name']: x for x in runtimesMatrix}
+ print(f'Filtered out runtimes: {runtimesMatrix}')
+
+ # loop over remaining runtimes to collect available pallets
+ for runtime in runtimesMatrix.values():
+ build_command = f"forklift cargo build -p {runtime['old_package']} --profile {profile} --features={runtime['bench_features']} --locked"
+ print(f'-- building {runtime["name"]} with `{build_command}`')
+ os.system(build_command)
+
+ chain = runtime['name'] if runtime['name'] == 'dev' else f"{runtime['name']}-dev"
+
+ machine_test = f"target/{profile}/{runtime['old_bin']} benchmark machine --chain={chain}"
+ print(f"Running machine test for `{machine_test}`")
+ os.system(machine_test)
+
+ print(f'-- listing pallets for benchmark for {chain}')
+ list_command = f"target/{profile}/{runtime['old_bin']} " \
+ f"benchmark pallet " \
+ f"--no-csv-header " \
+ f"--no-storage-info " \
+ f"--no-min-squares " \
+ f"--no-median-slopes " \
+ f"--all " \
+ f"--list " \
+ f"--chain={chain}"
+ print(f'-- running: {list_command}')
+ output = os.popen(list_command).read()
+ raw_pallets = output.strip().split('\n')
+
+ all_pallets = set()
+ for pallet in raw_pallets:
+ if pallet:
+ all_pallets.add(pallet.split(',')[0].strip())
+
+ pallets = list(all_pallets)
+ print(f'Pallets in {runtime["name"]}: {pallets}')
+ runtime_pallets_map[runtime['name']] = pallets
+
+ print(f'\n')
+
+ # filter out only the specified pallets from collected runtimes/pallets
+ if args.pallet:
+ print(f'Pallets: {args.pallet}')
+ new_pallets_map = {}
+ # keep only specified pallets if they exist in the runtime
+ for runtime in runtime_pallets_map:
+ if set(args.pallet).issubset(set(runtime_pallets_map[runtime])):
+ new_pallets_map[runtime] = args.pallet
+
+ runtime_pallets_map = new_pallets_map
+
+ print(f'Filtered out runtimes & pallets: {runtime_pallets_map}\n')
+
+ if not runtime_pallets_map:
+ if args.pallet and not args.runtime:
+ print(f"No pallets {args.pallet} found in any runtime")
+ elif args.runtime and not args.pallet:
+ print(f"{args.runtime} runtime does not have any pallets")
+ elif args.runtime and args.pallet:
+ print(f"No pallets {args.pallet} found in {args.runtime}")
+ else:
+ print('No runtimes found')
+ sys.exit(1)
+
+ for runtime in runtime_pallets_map:
+ for pallet in runtime_pallets_map[runtime]:
+ config = runtimesMatrix[runtime]
+ header_path = os.path.abspath(config['header'])
+ template = None
+
+ chain = config['name'] if runtime == 'dev' else f"{config['name']}-dev"
+
+ print(f'-- config: {config}')
+ if runtime == 'dev':
+ # to support sub-modules (https://github.com/paritytech/command-bot/issues/275)
+ search_manifest_path = f"cargo metadata --locked --format-version 1 --no-deps | jq -r '.packages[] | select(.name == \"{pallet.replace('_', '-')}\") | .manifest_path'"
+ print(f'-- running: {search_manifest_path}')
+ manifest_path = os.popen(search_manifest_path).read()
+ if not manifest_path:
+ print(f'-- pallet {pallet} not found in dev runtime')
+ if args.fail_fast:
+ print_and_log(f'Error: {pallet} not found in dev runtime')
+ sys.exit(1)
+ package_dir = os.path.dirname(manifest_path)
+ print(f'-- package_dir: {package_dir}')
+ print(f'-- manifest_path: {manifest_path}')
+ output_path = os.path.join(package_dir, "src", "weights.rs")
+ template = config['template']
+ else:
+ default_path = f"./{config['path']}/src/weights"
+ xcm_path = f"./{config['path']}/src/weights/xcm"
+ output_path = default_path
+ if pallet.startswith("pallet_xcm_benchmarks"):
+ template = config['template']
+ output_path = xcm_path
+
+ print(f'-- benchmarking {pallet} in {runtime} into {output_path}')
+ cmd = f"target/{profile}/{config['old_bin']} benchmark pallet " \
+ f"--extrinsic=* " \
+ f"--chain={chain} " \
+ f"--pallet={pallet} " \
+ f"--header={header_path} " \
+ f"--output={output_path} " \
+ f"--wasm-execution=compiled " \
+ f"--steps=50 " \
+ f"--repeat=20 " \
+ f"--heap-pages=4096 " \
+ f"{f'--template={template} ' if template else ''}" \
+ f"--no-storage-info --no-min-squares --no-median-slopes "
+ print(f'-- Running: {cmd} \n')
+ status = os.system(cmd)
+
+ if status != 0 and args.fail_fast:
+ print_and_log(f'❌ Failed to benchmark {pallet} in {runtime}')
+ sys.exit(1)
+
+ # Otherwise collect failed benchmarks and print them at the end
+ # push failed pallets to failed_benchmarks
+ if status != 0:
+ failed_benchmarks[f'{runtime}'] = failed_benchmarks.get(f'{runtime}', []) + [pallet]
+ else:
+ successful_benchmarks[f'{runtime}'] = successful_benchmarks.get(f'{runtime}', []) + [pallet]
+
+ if failed_benchmarks:
+ print_and_log('❌ Failed benchmarks of runtimes/pallets:')
+ for runtime, pallets in failed_benchmarks.items():
+ print_and_log(f'-- {runtime}: {pallets}')
+
+ if successful_benchmarks:
+ print_and_log('✅ Successful benchmarks of runtimes/pallets:')
+ for runtime, pallets in successful_benchmarks.items():
+ print_and_log(f'-- {runtime}: {pallets}')
elif args.command == 'fmt':
command = f"cargo +nightly fmt"
diff --git a/.github/scripts/cmd/test_cmd.py b/.github/scripts/cmd/test_cmd.py
index 7b29fbfe90d8..68998b989909 100644
--- a/.github/scripts/cmd/test_cmd.py
+++ b/.github/scripts/cmd/test_cmd.py
@@ -47,7 +47,7 @@
def get_mock_bench_output(runtime, pallets, output_path, header, bench_flags, template = None):
return f"frame-omni-bencher v1 benchmark pallet --extrinsic=* " \
- f"--runtime=target/release/wbuild/{runtime}-runtime/{runtime.replace('-', '_')}_runtime.wasm " \
+ f"--runtime=target/production/wbuild/{runtime}-runtime/{runtime.replace('-', '_')}_runtime.wasm " \
f"--pallet={pallets} --header={header} " \
f"--output={output_path} " \
f"--wasm-execution=compiled " \
@@ -93,7 +93,7 @@ def tearDown(self):
def test_bench_command_normal_execution_all_runtimes(self):
self.mock_parse_args.return_value = (argparse.Namespace(
- command='bench',
+ command='bench-omni',
runtime=list(map(lambda x: x['name'], mock_runtimes_matrix)),
pallet=['pallet_balances'],
fail_fast=True,
@@ -117,10 +117,10 @@ def test_bench_command_normal_execution_all_runtimes(self):
expected_calls = [
# Build calls
- call("forklift cargo build -p kitchensink-runtime --profile release --features=runtime-benchmarks"),
- call("forklift cargo build -p westend-runtime --profile release --features=runtime-benchmarks"),
- call("forklift cargo build -p rococo-runtime --profile release --features=runtime-benchmarks"),
- call("forklift cargo build -p asset-hub-westend-runtime --profile release --features=runtime-benchmarks"),
+ call("forklift cargo build -p kitchensink-runtime --profile production --features=runtime-benchmarks"),
+ call("forklift cargo build -p westend-runtime --profile production --features=runtime-benchmarks"),
+ call("forklift cargo build -p rococo-runtime --profile production --features=runtime-benchmarks"),
+ call("forklift cargo build -p asset-hub-westend-runtime --profile production --features=runtime-benchmarks"),
call(get_mock_bench_output(
runtime='kitchensink',
@@ -150,7 +150,7 @@ def test_bench_command_normal_execution_all_runtimes(self):
def test_bench_command_normal_execution(self):
self.mock_parse_args.return_value = (argparse.Namespace(
- command='bench',
+ command='bench-omni',
runtime=['westend'],
pallet=['pallet_balances', 'pallet_staking'],
fail_fast=True,
@@ -170,7 +170,7 @@ def test_bench_command_normal_execution(self):
expected_calls = [
# Build calls
- call("forklift cargo build -p westend-runtime --profile release --features=runtime-benchmarks"),
+ call("forklift cargo build -p westend-runtime --profile production --features=runtime-benchmarks"),
# Westend runtime calls
call(get_mock_bench_output(
@@ -193,7 +193,7 @@ def test_bench_command_normal_execution(self):
def test_bench_command_normal_execution_xcm(self):
self.mock_parse_args.return_value = (argparse.Namespace(
- command='bench',
+ command='bench-omni',
runtime=['westend'],
pallet=['pallet_xcm_benchmarks::generic'],
fail_fast=True,
@@ -213,7 +213,7 @@ def test_bench_command_normal_execution_xcm(self):
expected_calls = [
# Build calls
- call("forklift cargo build -p westend-runtime --profile release --features=runtime-benchmarks"),
+ call("forklift cargo build -p westend-runtime --profile production --features=runtime-benchmarks"),
# Westend runtime calls
call(get_mock_bench_output(
@@ -229,7 +229,7 @@ def test_bench_command_normal_execution_xcm(self):
def test_bench_command_two_runtimes_two_pallets(self):
self.mock_parse_args.return_value = (argparse.Namespace(
- command='bench',
+ command='bench-omni',
runtime=['westend', 'rococo'],
pallet=['pallet_balances', 'pallet_staking'],
fail_fast=True,
@@ -250,8 +250,8 @@ def test_bench_command_two_runtimes_two_pallets(self):
expected_calls = [
# Build calls
- call("forklift cargo build -p westend-runtime --profile release --features=runtime-benchmarks"),
- call("forklift cargo build -p rococo-runtime --profile release --features=runtime-benchmarks"),
+ call("forklift cargo build -p westend-runtime --profile production --features=runtime-benchmarks"),
+ call("forklift cargo build -p rococo-runtime --profile production --features=runtime-benchmarks"),
# Westend runtime calls
call(get_mock_bench_output(
runtime='westend',
@@ -287,7 +287,7 @@ def test_bench_command_two_runtimes_two_pallets(self):
def test_bench_command_one_dev_runtime(self):
self.mock_parse_args.return_value = (argparse.Namespace(
- command='bench',
+ command='bench-omni',
runtime=['dev'],
pallet=['pallet_balances'],
fail_fast=True,
@@ -309,7 +309,7 @@ def test_bench_command_one_dev_runtime(self):
expected_calls = [
# Build calls
- call("forklift cargo build -p kitchensink-runtime --profile release --features=runtime-benchmarks"),
+ call("forklift cargo build -p kitchensink-runtime --profile production --features=runtime-benchmarks"),
# Westend runtime calls
call(get_mock_bench_output(
runtime='kitchensink',
@@ -324,7 +324,7 @@ def test_bench_command_one_dev_runtime(self):
def test_bench_command_one_cumulus_runtime(self):
self.mock_parse_args.return_value = (argparse.Namespace(
- command='bench',
+ command='bench-omni',
runtime=['asset-hub-westend'],
pallet=['pallet_assets'],
fail_fast=True,
@@ -344,7 +344,7 @@ def test_bench_command_one_cumulus_runtime(self):
expected_calls = [
# Build calls
- call("forklift cargo build -p asset-hub-westend-runtime --profile release --features=runtime-benchmarks"),
+ call("forklift cargo build -p asset-hub-westend-runtime --profile production --features=runtime-benchmarks"),
# Asset-hub-westend runtime calls
call(get_mock_bench_output(
runtime='asset-hub-westend',
@@ -359,7 +359,7 @@ def test_bench_command_one_cumulus_runtime(self):
def test_bench_command_one_cumulus_runtime_xcm(self):
self.mock_parse_args.return_value = (argparse.Namespace(
- command='bench',
+ command='bench-omni',
runtime=['asset-hub-westend'],
pallet=['pallet_xcm_benchmarks::generic', 'pallet_assets'],
fail_fast=True,
@@ -379,7 +379,7 @@ def test_bench_command_one_cumulus_runtime_xcm(self):
expected_calls = [
# Build calls
- call("forklift cargo build -p asset-hub-westend-runtime --profile release --features=runtime-benchmarks"),
+ call("forklift cargo build -p asset-hub-westend-runtime --profile production --features=runtime-benchmarks"),
# Asset-hub-westend runtime calls
call(get_mock_bench_output(
runtime='asset-hub-westend',
diff --git a/.github/scripts/common/lib.sh b/.github/scripts/common/lib.sh
index 6b8f70a26d7e..c9be21e45dcb 100755
--- a/.github/scripts/common/lib.sh
+++ b/.github/scripts/common/lib.sh
@@ -270,20 +270,19 @@ fetch_debian_package_from_s3() {
}
# Fetch the release artifacts like binary and signatures from S3. Assumes the ENV are set:
-# - RELEASE_ID
-# - GITHUB_TOKEN
-# - REPO in the form paritytech/polkadot
+# inputs: binary (polkadot), target(aarch64-apple-darwin)
fetch_release_artifacts_from_s3() {
BINARY=$1
- OUTPUT_DIR=${OUTPUT_DIR:-"./release-artifacts/${BINARY}"}
+ TARGET=$2
+ OUTPUT_DIR=${OUTPUT_DIR:-"./release-artifacts/${TARGET}/${BINARY}"}
echo "OUTPUT_DIR : $OUTPUT_DIR"
URL_BASE=$(get_s3_url_base $BINARY)
echo "URL_BASE=$URL_BASE"
- URL_BINARY=$URL_BASE/$VERSION/$BINARY
- URL_SHA=$URL_BASE/$VERSION/$BINARY.sha256
- URL_ASC=$URL_BASE/$VERSION/$BINARY.asc
+ URL_BINARY=$URL_BASE/$VERSION/$TARGET/$BINARY
+ URL_SHA=$URL_BASE/$VERSION/$TARGET/$BINARY.sha256
+ URL_ASC=$URL_BASE/$VERSION/$TARGET/$BINARY.asc
# Fetch artifacts
mkdir -p "$OUTPUT_DIR"
@@ -298,7 +297,6 @@ fetch_release_artifacts_from_s3() {
pwd
ls -al --color
popd > /dev/null
-
}
# Pass the name of the binary as input, it will
@@ -306,15 +304,26 @@ fetch_release_artifacts_from_s3() {
function get_s3_url_base() {
name=$1
case $name in
- polkadot | polkadot-execute-worker | polkadot-prepare-worker | staking-miner)
+ polkadot | polkadot-execute-worker | polkadot-prepare-worker )
printf "https://releases.parity.io/polkadot"
;;
- polkadot-parachain)
- printf "https://releases.parity.io/cumulus"
+ polkadot-parachain)
+ printf "https://releases.parity.io/polkadot-parachain"
+ ;;
+
+ polkadot-omni-node)
+ printf "https://releases.parity.io/polkadot-omni-node"
;;
- *)
+ chain-spec-builder)
+ printf "https://releases.parity.io/chain-spec-builder"
+ ;;
+
+ frame-omni-bencher)
+ printf "https://releases.parity.io/frame-omni-bencher"
+ ;;
+ *)
printf "UNSUPPORTED BINARY $name"
exit 1
;;
@@ -497,3 +506,16 @@ validate_stable_tag() {
exit 1
fi
}
+
+# Prepare docker stable tag form the polkadot stable tag
+# input: tag (polkaodot-stableYYMM(-X) or polkadot-stableYYMM(-X)-rcX)
+# output: stableYYMM(-X) or stableYYMM(-X)-rcX
+prepare_docker_stable_tag() {
+ tag="$1"
+ if [[ "$tag" =~ stable[0-9]{4}(-[0-9]+)?(-rc[0-9]+)? ]]; then
+ echo "${BASH_REMATCH[0]}"
+ else
+ echo "Tag is invalid: $tag"
+ exit 1
+ fi
+}
diff --git a/.github/scripts/release/release_lib.sh b/.github/scripts/release/release_lib.sh
index 8b9254ec3f29..984709f2ea03 100644
--- a/.github/scripts/release/release_lib.sh
+++ b/.github/scripts/release/release_lib.sh
@@ -129,13 +129,69 @@ upload_s3_release() {
echo "Working on version: $version "
echo "Working on platform: $target "
+ URL_BASE=$(get_s3_url_base $product)
+
echo "Current content, should be empty on new uploads:"
- aws s3 ls "s3://releases.parity.io/${product}/${version}/${target}" --recursive --human-readable --summarize || true
+ aws s3 ls "s3://${URL_BASE}/${version}/${target}" --recursive --human-readable --summarize || true
echo "Content to be uploaded:"
- artifacts="artifacts/$product/"
+ artifacts="release-artifacts/$target/$product/"
ls "$artifacts"
- aws s3 sync --acl public-read "$artifacts" "s3://releases.parity.io/${product}/${version}/${target}"
+ aws s3 sync --acl public-read "$artifacts" "s3://${URL_BASE}/${version}/${target}"
echo "Uploaded files:"
- aws s3 ls "s3://releases.parity.io/${product}/${version}/${target}" --recursive --human-readable --summarize
- echo "✅ The release should be at https://releases.parity.io/${product}/${version}/${target}"
+ aws s3 ls "s3://${URL_BASE}/${version}/${target}" --recursive --human-readable --summarize
+ echo "✅ The release should be at https://${URL_BASE}/${version}/${target}"
+}
+
+# Upload runtimes artifacts to s3 release bucket
+#
+# input: version (stable release tage.g. polkadot-stable2412 or polkadot-stable2412-rc1)
+# output: none
+upload_s3_runtimes_release_artifacts() {
+ alias aws='podman run --rm -it docker.io/paritytech/awscli -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_BUCKET aws'
+
+ version=$1
+
+ echo "Working on version: $version "
+
+ echo "Current content, should be empty on new uploads:"
+ aws s3 ls "s3://releases.parity.io/polkadot/runtimes/${version}/" --recursive --human-readable --summarize || true
+ echo "Content to be uploaded:"
+ artifacts="artifacts/runtimes/"
+ ls "$artifacts"
+ aws s3 sync --acl public-read "$artifacts" "s3://releases.parity.io/polkadot/runtimes/${version}/"
+ echo "Uploaded files:"
+ aws s3 ls "s3://releases.parity.io/polkadot/runtimes/${version}/" --recursive --human-readable --summarize
+ echo "✅ The release should be at https://releases.parity.io/polkadot/runtimes/${version}"
+}
+
+
+# Pass the name of the binary as input, it will
+# return the s3 base url
+function get_s3_url_base() {
+ name=$1
+ case $name in
+ polkadot | polkadot-execute-worker | polkadot-prepare-worker )
+ printf "releases.parity.io/polkadot"
+ ;;
+
+ polkadot-parachain)
+ printf "releases.parity.io/polkadot-parachain"
+ ;;
+
+ polkadot-omni-node)
+ printf "releases.parity.io/polkadot-omni-node"
+ ;;
+
+ chain-spec-builder)
+ printf "releases.parity.io/chain-spec-builder"
+ ;;
+
+ frame-omni-bencher)
+ printf "releases.parity.io/frame-omni-bencher"
+ ;;
+ *)
+ printf "UNSUPPORTED BINARY $name"
+ exit 1
+ ;;
+ esac
}
diff --git a/.github/workflows/build-misc.yml b/.github/workflows/build-misc.yml
index c4a7281b9ebc..335c26282027 100644
--- a/.github/workflows/build-misc.yml
+++ b/.github/workflows/build-misc.yml
@@ -20,7 +20,7 @@ jobs:
uses: ./.github/workflows/reusable-preflight.yml
build-runtimes-polkavm:
- timeout-minutes: 20
+ timeout-minutes: 60
needs: [preflight]
runs-on: ${{ needs.preflight.outputs.RUNNER }}
container:
@@ -38,11 +38,7 @@ jobs:
env:
SUBSTRATE_RUNTIME_TARGET: riscv
id: required
- run: |
- forklift cargo check -p minimal-template-runtime
- forklift cargo check -p westend-runtime
- forklift cargo check -p rococo-runtime
- forklift cargo check -p polkadot-test-runtime
+ run: forklift cargo check -p minimal-template-runtime -p westend-runtime -p rococo-runtime -p polkadot-test-runtime
- name: Stop all workflows if failed
if: ${{ failure() && steps.required.conclusion == 'failure' && !github.event.pull_request.head.repo.fork }}
uses: ./.github/actions/workflow-stopper
diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml
index dd9d3eaf824f..cea6b9a8636a 100644
--- a/.github/workflows/check-links.yml
+++ b/.github/workflows/check-links.yml
@@ -33,7 +33,7 @@ jobs:
- uses: actions/checkout@6d193bf28034eafb982f37bd894289fe649468fc # v4.1.0 (22. Sep 2023)
- name: Lychee link checker
- uses: lycheeverse/lychee-action@7cd0af4c74a61395d455af97419279d86aafaede # for v1.9.1 (10. Jan 2024)
+ uses: lycheeverse/lychee-action@f81112d0d2814ded911bd23e3beaa9dda9093915 # for v1.9.1 (10. Jan 2024)
with:
args: >-
--config .config/lychee.toml
diff --git a/.github/workflows/check-semver.yml b/.github/workflows/check-semver.yml
index 8d77b6a31b75..16028c8de770 100644
--- a/.github/workflows/check-semver.yml
+++ b/.github/workflows/check-semver.yml
@@ -11,7 +11,7 @@ concurrency:
cancel-in-progress: true
env:
- TOOLCHAIN: nightly-2024-10-19
+ TOOLCHAIN: nightly-2024-11-19
jobs:
preflight:
@@ -74,10 +74,15 @@ jobs:
- name: install parity-publish
# Set the target dir to cache the build.
- run: CARGO_TARGET_DIR=./target/ cargo install parity-publish@0.10.1 --locked -q
+ run: CARGO_TARGET_DIR=./target/ cargo install parity-publish@0.10.3 --locked -q
- name: check semver
run: |
+ if [ -z "$PR" ]; then
+ echo "Skipping master/merge queue"
+ exit 0
+ fi
+
export CARGO_TARGET_DIR=target
export RUSTFLAGS='-A warnings -A missing_docs'
export SKIP_WASM_BUILD=1
diff --git a/.github/workflows/checks-quick.yml b/.github/workflows/checks-quick.yml
index c733a2517cb8..4c26b85a6303 100644
--- a/.github/workflows/checks-quick.yml
+++ b/.github/workflows/checks-quick.yml
@@ -97,7 +97,6 @@ jobs:
--exclude
"substrate/frame/contracts/fixtures/build"
"substrate/frame/contracts/fixtures/contracts/common"
- "substrate/frame/revive/fixtures/build"
"substrate/frame/revive/fixtures/contracts/common"
- name: deny git deps
run: python3 .github/scripts/deny-git-deps.py .
diff --git a/.github/workflows/cmd.yml b/.github/workflows/cmd.yml
index 525ab0c0fc23..42b2eab3b9e4 100644
--- a/.github/workflows/cmd.yml
+++ b/.github/workflows/cmd.yml
@@ -19,10 +19,10 @@ jobs:
steps:
- name: Generate token
id: generate_token
- uses: tibdex/github-app-token@v2.1.0
+ uses: actions/create-github-app-token@v1
with:
- app_id: ${{ secrets.CMD_BOT_APP_ID }}
- private_key: ${{ secrets.CMD_BOT_APP_KEY }}
+ app-id: ${{ secrets.CMD_BOT_APP_ID }}
+ private-key: ${{ secrets.CMD_BOT_APP_KEY }}
- name: Check if user is a member of the organization
id: is-member
@@ -227,7 +227,8 @@ jobs:
cat .github/env >> $GITHUB_OUTPUT
if [ -n "$IMAGE_OVERRIDE" ]; then
- echo "IMAGE=$IMAGE_OVERRIDE" >> $GITHUB_OUTPUT
+ IMAGE=$IMAGE_OVERRIDE
+ echo "IMAGE=$IMAGE" >> $GITHUB_OUTPUT
fi
if [[ $BODY == "/cmd bench"* ]]; then
@@ -237,6 +238,10 @@ jobs:
else
echo "RUNNER=ubuntu-latest" >> $GITHUB_OUTPUT
fi
+ - name: Print outputs
+ run: |
+ echo "RUNNER=${{ steps.set-image.outputs.RUNNER }}"
+ echo "IMAGE=${{ steps.set-image.outputs.IMAGE }}"
# Get PR branch name, because the issue_comment event does not contain the PR branch name
get-pr-branch:
@@ -283,10 +288,24 @@ jobs:
env:
JOB_NAME: "cmd"
runs-on: ${{ needs.set-image.outputs.RUNNER }}
- timeout-minutes: 4320 # 72 hours -> 3 days; as it could take a long time to run all the runtimes/pallets
container:
image: ${{ needs.set-image.outputs.IMAGE }}
+ timeout-minutes: 1440 # 24 hours per runtime
steps:
+ - name: Generate token
+ uses: actions/create-github-app-token@v1
+ id: generate_token
+ with:
+ app-id: ${{ secrets.CMD_BOT_APP_ID }}
+ private-key: ${{ secrets.CMD_BOT_APP_KEY }}
+
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ token: ${{ steps.generate_token.outputs.token }}
+ repository: ${{ needs.get-pr-branch.outputs.repo }}
+ ref: ${{ needs.get-pr-branch.outputs.pr-branch }}
+
- name: Get command
uses: actions-ecosystem/action-regex-match@v2
id: get-pr-comment
@@ -340,13 +359,7 @@ jobs:
repo: context.repo.repo,
body: `Command "${{ steps.get-pr-comment.outputs.group2 }}" has started 🚀 [See logs here](${job_url})`
})
-
- - name: Checkout
- uses: actions/checkout@v4
- with:
- repository: ${{ needs.get-pr-branch.outputs.repo }}
- ref: ${{ needs.get-pr-branch.outputs.pr-branch }}
-
+
- name: Install dependencies for bench
if: startsWith(steps.get-pr-comment.outputs.group2, 'bench')
run: |
@@ -364,6 +377,7 @@ jobs:
# Fixes "detected dubious ownership" error in the ci
git config --global --add safe.directory '*'
git remote -v
+ cat /proc/cpuinfo
python3 -m pip install -r .github/scripts/generate-prdoc.requirements.txt
python3 .github/scripts/cmd/cmd.py $CMD $PR_ARG
git status
@@ -386,19 +400,41 @@ jobs:
name: command-output
path: /tmp/cmd/command_output.log
+ # Generate token for commit, as the earlier token expires after 1 hour, while cmd can take longer
+ - name: Generate token for commit
+ uses: actions/create-github-app-token@v1
+ id: generate_token_commit
+ with:
+ app-id: ${{ secrets.CMD_BOT_APP_ID }}
+ private-key: ${{ secrets.CMD_BOT_APP_KEY }}
+
- name: Commit changes
run: |
if [ -n "$(git status --porcelain)" ]; then
- git config --local user.email "action@github.com"
- git config --local user.name "GitHub Action"
+ git config --global user.name command-bot
+ git config --global user.email "<>"
+ git config --global pull.rebase false
+
+ # Push the results to the target branch
+ git remote add \
+ github \
+ "https://x-access-token:${{ steps.generate_token_commit.outputs.token }}@github.com/${{ needs.get-pr-branch.outputs.repo }}.git" || :
+
+ push_changes() {
+ git push github "HEAD:${{ needs.get-pr-branch.outputs.pr-branch }}"
+ }
git add .
git restore --staged Cargo.lock # ignore changes in Cargo.lock
git commit -m "Update from ${{ github.actor }} running command '${{ steps.get-pr-comment.outputs.group2 }}'" || true
- git pull --rebase origin ${{ needs.get-pr-branch.outputs.pr-branch }}
-
- git push origin ${{ needs.get-pr-branch.outputs.pr-branch }}
+ # Attempt to push changes
+ if ! push_changes; then
+ echo "Push failed, trying to rebase..."
+ git pull --rebase github "${{ needs.get-pr-branch.outputs.pr-branch }}"
+ # After successful rebase, try pushing again
+ push_changes
+ fi
else
echo "Nothing to commit";
fi
diff --git a/.github/workflows/command-backport.yml b/.github/workflows/command-backport.yml
index eecf0ac72d2c..8a017a434525 100644
--- a/.github/workflows/command-backport.yml
+++ b/.github/workflows/command-backport.yml
@@ -86,7 +86,7 @@ jobs:
const reviewer = '${{ github.event.pull_request.user.login }}';
for (const pullNumber of pullNumbers) {
- await github.pulls.createReviewRequest({
+ await github.pulls.requestReviewers({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: parseInt(pullNumber),
diff --git a/.github/workflows/publish-check-compile.yml b/.github/workflows/publish-check-compile.yml
new file mode 100644
index 000000000000..ada8635e314e
--- /dev/null
+++ b/.github/workflows/publish-check-compile.yml
@@ -0,0 +1,48 @@
+name: Check publish build
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ types: [opened, synchronize, reopened, ready_for_review]
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ preflight:
+ uses: ./.github/workflows/reusable-preflight.yml
+
+ check-publish:
+ timeout-minutes: 90
+ needs: [preflight]
+ runs-on: ${{ needs.preflight.outputs.RUNNER }}
+ container:
+ image: ${{ needs.preflight.outputs.IMAGE }}
+ steps:
+ - uses: actions/checkout@6d193bf28034eafb982f37bd894289fe649468fc # v4.1.7
+
+ - name: Rust Cache
+ uses: Swatinem/rust-cache@82a92a6e8fbeee089604da2575dc567ae9ddeaab # v2.7.5
+ with:
+ cache-on-failure: true
+
+ - name: install parity-publish
+ run: cargo install parity-publish@0.10.3 --locked -q
+
+ - name: parity-publish update plan
+ run: parity-publish --color always plan --skip-check --prdoc prdoc/
+
+ - name: parity-publish apply plan
+ run: parity-publish --color always apply --registry
+
+ - name: parity-publish check compile
+ run: |
+ packages="$(parity-publish apply --print)"
+
+ if [ -n "$packages" ]; then
+ cargo --color always check $(printf -- '-p %s ' $packages)
+ fi
diff --git a/.github/workflows/publish-check-crates.yml b/.github/workflows/publish-check-crates.yml
index 3fad3b641474..3150cb9dd405 100644
--- a/.github/workflows/publish-check-crates.yml
+++ b/.github/workflows/publish-check-crates.yml
@@ -24,7 +24,7 @@ jobs:
cache-on-failure: true
- name: install parity-publish
- run: cargo install parity-publish@0.8.0 --locked -q
+ run: cargo install parity-publish@0.10.3 --locked -q
- name: parity-publish check
run: parity-publish --color always check --allow-unpublished
diff --git a/.github/workflows/publish-claim-crates.yml b/.github/workflows/publish-claim-crates.yml
index 37bf06bb82d8..a6efc8a5599e 100644
--- a/.github/workflows/publish-claim-crates.yml
+++ b/.github/workflows/publish-claim-crates.yml
@@ -18,7 +18,7 @@ jobs:
cache-on-failure: true
- name: install parity-publish
- run: cargo install parity-publish@0.8.0 --locked -q
+ run: cargo install parity-publish@0.10.3 --locked -q
- name: parity-publish claim
env:
diff --git a/.github/workflows/release-branchoff-stable.yml b/.github/workflows/release-10_branchoff-stable.yml
similarity index 100%
rename from .github/workflows/release-branchoff-stable.yml
rename to .github/workflows/release-10_branchoff-stable.yml
diff --git a/.github/workflows/release-10_rc-automation.yml b/.github/workflows/release-11_rc-automation.yml
similarity index 100%
rename from .github/workflows/release-10_rc-automation.yml
rename to .github/workflows/release-11_rc-automation.yml
diff --git a/.github/workflows/release-build-rc.yml b/.github/workflows/release-20_build-rc.yml
similarity index 62%
rename from .github/workflows/release-build-rc.yml
rename to .github/workflows/release-20_build-rc.yml
index a43c2b282a8d..d4c7055c37c5 100644
--- a/.github/workflows/release-build-rc.yml
+++ b/.github/workflows/release-20_build-rc.yml
@@ -11,10 +11,12 @@ on:
- polkadot
- polkadot-parachain
- polkadot-omni-node
+ - frame-omni-bencher
+ - chain-spec-builder
- all
release_tag:
- description: Tag matching the actual release candidate with the format stableYYMM-rcX or stableYYMM
+ description: Tag matching the actual release candidate with the format polkadot-stableYYMM(-X)-rcX or polkadot-stableYYMM(-X)
type: string
jobs:
@@ -106,6 +108,50 @@ jobs:
attestations: write
contents: read
+ build-frame-omni-bencher-binary:
+ needs: [validate-inputs]
+ if: ${{ inputs.binary == 'frame-omni-bencher' || inputs.binary == 'all' }}
+ uses: "./.github/workflows/release-reusable-rc-buid.yml"
+ with:
+ binary: '["frame-omni-bencher"]'
+ package: "frame-omni-bencher"
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: x86_64-unknown-linux-gnu
+ secrets:
+ PGP_KMS_KEY: ${{ secrets.PGP_KMS_KEY }}
+ PGP_KMS_HASH: ${{ secrets.PGP_KMS_HASH }}
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+ permissions:
+ id-token: write
+ attestations: write
+ contents: read
+
+ build-chain-spec-builder-binary:
+ needs: [validate-inputs]
+ if: ${{ inputs.binary == 'chain-spec-builder' || inputs.binary == 'all' }}
+ uses: "./.github/workflows/release-reusable-rc-buid.yml"
+ with:
+ binary: '["chain-spec-builder"]'
+ package: staging-chain-spec-builder
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: x86_64-unknown-linux-gnu
+ secrets:
+ PGP_KMS_KEY: ${{ secrets.PGP_KMS_KEY }}
+ PGP_KMS_HASH: ${{ secrets.PGP_KMS_HASH }}
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+ permissions:
+ id-token: write
+ attestations: write
+ contents: read
+
build-polkadot-macos-binary:
needs: [validate-inputs]
if: ${{ inputs.binary == 'polkadot' || inputs.binary == 'all' }}
@@ -134,7 +180,7 @@ jobs:
uses: "./.github/workflows/release-reusable-rc-buid.yml"
with:
binary: '["polkadot-parachain"]'
- package: "polkadot-parachain-bin"
+ package: polkadot-parachain-bin
release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
target: aarch64-apple-darwin
secrets:
@@ -156,7 +202,51 @@ jobs:
uses: "./.github/workflows/release-reusable-rc-buid.yml"
with:
binary: '["polkadot-omni-node"]'
- package: "polkadot-omni-node"
+ package: polkadot-omni-node
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: aarch64-apple-darwin
+ secrets:
+ PGP_KMS_KEY: ${{ secrets.PGP_KMS_KEY }}
+ PGP_KMS_HASH: ${{ secrets.PGP_KMS_HASH }}
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+ permissions:
+ id-token: write
+ attestations: write
+ contents: read
+
+ build-frame-omni-bencher-macos-binary:
+ needs: [validate-inputs]
+ if: ${{ inputs.binary == 'frame-omni-bencher' || inputs.binary == 'all' }}
+ uses: "./.github/workflows/release-reusable-rc-buid.yml"
+ with:
+ binary: '["frame-omni-bencher"]'
+ package: frame-omni-bencher
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: aarch64-apple-darwin
+ secrets:
+ PGP_KMS_KEY: ${{ secrets.PGP_KMS_KEY }}
+ PGP_KMS_HASH: ${{ secrets.PGP_KMS_HASH }}
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+ permissions:
+ id-token: write
+ attestations: write
+ contents: read
+
+ build-chain-spec-builder-macos-binary:
+ needs: [validate-inputs]
+ if: ${{ inputs.binary == 'chain-spec-builder' || inputs.binary == 'all' }}
+ uses: "./.github/workflows/release-reusable-rc-buid.yml"
+ with:
+ binary: '["chain-spec-builder"]'
+ package: staging-chain-spec-builder
release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
target: aarch64-apple-darwin
secrets:
diff --git a/.github/workflows/release-30_publish_release_draft.yml b/.github/workflows/release-30_publish_release_draft.yml
index 4364b4f80457..78ceea91f100 100644
--- a/.github/workflows/release-30_publish_release_draft.yml
+++ b/.github/workflows/release-30_publish_release_draft.yml
@@ -1,19 +1,46 @@
name: Release - Publish draft
-on:
- push:
- tags:
- # Catches v1.2.3 and v1.2.3-rc1
- - v[0-9]+.[0-9]+.[0-9]+*
- # - polkadot-stable[0-9]+* Activate when the release process from release org is setteled
+# This workflow runs in paritytech-release and creates full release draft with:
+# - release notes
+# - info about the runtimes
+# - attached artifacts:
+# - runtimes
+# - binaries
+# - signatures
+on:
workflow_dispatch:
inputs:
- version:
- description: Current release/rc version
+ release_tag:
+ description: Tag matching the actual release candidate with the format polkadot-stableYYMM(-X)-rcX or polkadot-stableYYMM(-X)
+ required: true
+ type: string
jobs:
+ check-synchronization:
+ uses: paritytech-release/sync-workflows/.github/workflows/check-syncronization.yml@main
+
+ validate-inputs:
+ needs: [ check-synchronization ]
+ if: ${{ needs.check-synchronization.outputs.checks_passed }} == 'true'
+ runs-on: ubuntu-latest
+ outputs:
+ release_tag: ${{ steps.validate_inputs.outputs.release_tag }}
+
+ steps:
+ - name: Checkout sources
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Validate inputs
+ id: validate_inputs
+ run: |
+ . ./.github/scripts/common/lib.sh
+
+ RELEASE_TAG=$(validate_stable_tag ${{ inputs.release_tag }})
+ echo "release_tag=${RELEASE_TAG}" >> $GITHUB_OUTPUT
+
get-rust-versions:
+ needs: [ validate-inputs ]
runs-on: ubuntu-latest
outputs:
rustc-stable: ${{ steps.get-rust-versions.outputs.stable }}
@@ -24,47 +51,28 @@ jobs:
echo "stable=$RUST_STABLE_VERSION" >> $GITHUB_OUTPUT
build-runtimes:
+ needs: [ validate-inputs ]
uses: "./.github/workflows/release-srtool.yml"
with:
excluded_runtimes: "asset-hub-rococo bridge-hub-rococo contracts-rococo coretime-rococo people-rococo rococo rococo-parachain substrate-test bp cumulus-test kitchensink minimal-template parachain-template penpal polkadot-test seedling shell frame-try sp solochain-template polkadot-sdk-docs-first"
build_opts: "--features on-chain-release-build"
-
- build-binaries:
- runs-on: ubuntu-latest
- strategy:
- matrix:
- # Tuples of [package, binary-name]
- binary: [ [frame-omni-bencher, frame-omni-bencher], [staging-chain-spec-builder, chain-spec-builder] ]
- steps:
- - name: Checkout sources
- uses: actions/checkout@6d193bf28034eafb982f37bd894289fe649468fc # v4.0.0
-
- - name: Install protobuf-compiler
- run: |
- sudo apt update
- sudo apt install -y protobuf-compiler
-
- - name: Build ${{ matrix.binary[1] }} binary
- run: |
- cargo build --locked --profile=production -p ${{ matrix.binary[0] }} --bin ${{ matrix.binary[1] }}
- target/production/${{ matrix.binary[1] }} --version
-
- - name: Upload ${{ matrix.binary[1] }} binary
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
- with:
- name: ${{ matrix.binary[1] }}
- path: target/production/${{ matrix.binary[1] }}
-
+ profile: production
+ permissions:
+ id-token: write
+ attestations: write
+ contents: read
publish-release-draft:
runs-on: ubuntu-latest
- needs: [ get-rust-versions, build-runtimes ]
+ environment: release
+ needs: [ validate-inputs, get-rust-versions, build-runtimes ]
outputs:
release_url: ${{ steps.create-release.outputs.html_url }}
asset_upload_url: ${{ steps.create-release.outputs.upload_url }}
+
steps:
- name: Checkout
- uses: actions/checkout@6d193bf28034eafb982f37bd894289fe649468fc # v4.0.0
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Download artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
@@ -87,20 +95,21 @@ jobs:
GLUTTON_WESTEND_DIGEST: ${{ github.workspace}}/glutton-westend-runtime/glutton-westend-srtool-digest.json
PEOPLE_WESTEND_DIGEST: ${{ github.workspace}}/people-westend-runtime/people-westend-srtool-digest.json
WESTEND_DIGEST: ${{ github.workspace}}/westend-runtime/westend-srtool-digest.json
+ RELEASE_TAG: ${{ needs.validate-inputs.outputs.release_tag }}
shell: bash
run: |
. ./.github/scripts/common/lib.sh
export REF1=$(get_latest_release_tag)
- if [[ -z "${{ inputs.version }}" ]]; then
+ if [[ -z "$RELEASE_TAG" ]]; then
export REF2="${{ github.ref_name }}"
echo "REF2: ${REF2}"
else
- export REF2="${{ inputs.version }}"
+ export REF2="$RELEASE_TAG"
echo "REF2: ${REF2}"
fi
echo "REL_TAG=$REF2" >> $GITHUB_ENV
- export VERSION=$(echo "$REF2" | sed -E 's/.*(stable[0-9]+).*$/\1/')
+ export VERSION=$(echo "$REF2" | sed -E 's/.*(stable[0-9]{4}(-[0-9]+)?).*$/\1/')
./scripts/release/build-changelogs.sh
@@ -112,19 +121,29 @@ jobs:
scripts/release/context.json
**/*-srtool-digest.json
+ - name: Generate content write token for the release automation
+ id: generate_write_token
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ vars.POLKADOT_SDK_RELEASE_RW_APP_ID }}
+ private-key: ${{ secrets.POLKADOT_SDK_RELEASE_RW_APP_KEY }}
+ owner: paritytech
+ repositories: polkadot-sdk
+
- name: Create draft release
id: create-release
- uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1.1.4
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- tag_name: ${{ env.REL_TAG }}
- release_name: Polkadot ${{ env.REL_TAG }}
- body_path: ${{ github.workspace}}/scripts/release/RELEASE_DRAFT.md
- draft: true
+ GITHUB_TOKEN: ${{ steps.generate_write_token.outputs.token }}
+ run: |
+ gh release create ${{ env.REL_TAG }} \
+ --repo paritytech/polkadot-sdk \
+ --draft \
+ --title "Polkadot ${{ env.REL_TAG }}" \
+ --notes-file ${{ github.workspace}}/scripts/release/RELEASE_DRAFT.md
publish-runtimes:
- needs: [ build-runtimes, publish-release-draft ]
+ needs: [ validate-inputs, build-runtimes, publish-release-draft ]
+ environment: release
continue-on-error: true
runs-on: ubuntu-latest
strategy:
@@ -132,7 +151,7 @@ jobs:
steps:
- name: Checkout sources
- uses: actions/checkout@6d193bf28034eafb982f37bd894289fe649468fc # v4.0.0
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Download artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
@@ -144,44 +163,83 @@ jobs:
>>$GITHUB_ENV echo ASSET=$(find ${{ matrix.chain }}-runtime -name '*.compact.compressed.wasm')
>>$GITHUB_ENV echo SPEC=$(<${JSON} jq -r .runtimes.compact.subwasm.core_version.specVersion)
+ - name: Generate content write token for the release automation
+ id: generate_write_token
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ vars.POLKADOT_SDK_RELEASE_RW_APP_ID }}
+ private-key: ${{ secrets.POLKADOT_SDK_RELEASE_RW_APP_KEY }}
+ owner: paritytech
+ repositories: polkadot-sdk
+
- name: Upload compressed ${{ matrix.chain }} v${{ env.SPEC }} wasm
- if: ${{ matrix.chain != 'rococo-parachain' }}
- uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 #v1.0.2
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ needs.publish-release-draft.outputs.asset_upload_url }}
- asset_path: ${{ env.ASSET }}
- asset_name: ${{ matrix.chain }}_runtime-v${{ env.SPEC }}.compact.compressed.wasm
- asset_content_type: application/wasm
+ GITHUB_TOKEN: ${{ steps.generate_write_token.outputs.token }}
+ run: |
+ gh release upload ${{ needs.validate-inputs.outputs.release_tag }} \
+ --repo paritytech/polkadot-sdk \
+ '${{ env.ASSET }}#${{ matrix.chain }}_runtime-v${{ env.SPEC }}.compact.compressed.wasm'
- publish-binaries:
- needs: [ publish-release-draft, build-binaries ]
+ publish-release-artifacts:
+ needs: [ validate-inputs, publish-release-draft ]
+ environment: release
continue-on-error: true
runs-on: ubuntu-latest
strategy:
matrix:
- binary: [frame-omni-bencher, chain-spec-builder]
+ binary: [ polkadot, polkadot-execute-worker, polkadot-prepare-worker, polkadot-parachain, polkadot-omni-node, frame-omni-bencher, chain-spec-builder ]
+ target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ]
steps:
- - name: Download artifacts
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
+ - name: Checkout sources
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Fetch binaries from s3 based on version
+ run: |
+ . ./.github/scripts/common/lib.sh
+
+ VERSION="${{ needs.validate-inputs.outputs.release_tag }}"
+ fetch_release_artifacts_from_s3 ${{ matrix.binary }} ${{ matrix.target }}
+
+ - name: Rename aarch64-apple-darwin binaries
+ if: ${{ matrix.target == 'aarch64-apple-darwin' }}
+ working-directory: ${{ github.workspace}}/release-artifacts/${{ matrix.target }}/${{ matrix.binary }}
+ run: |
+ mv ${{ matrix.binary }} ${{ matrix.binary }}-aarch64-apple-darwin
+ mv ${{ matrix.binary }}.asc ${{ matrix.binary }}-aarch64-apple-darwin.asc
+ mv ${{ matrix.binary }}.sha256 ${{ matrix.binary }}-aarch64-apple-darwin.sha256
+
+ - name: Generate content write token for the release automation
+ id: generate_write_token
+ uses: actions/create-github-app-token@v1
with:
- name: ${{ matrix.binary }}
+ app-id: ${{ vars.POLKADOT_SDK_RELEASE_RW_APP_ID }}
+ private-key: ${{ secrets.POLKADOT_SDK_RELEASE_RW_APP_KEY }}
+ owner: paritytech
+ repositories: polkadot-sdk
- - name: Upload ${{ matrix.binary }} binary
- uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 #v1.0.2
+ - name: Upload ${{ matrix.binary }} binary to release draft
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ needs.publish-release-draft.outputs.asset_upload_url }}
- asset_path: ${{ github.workspace}}/${{ matrix.binary }}
- asset_name: ${{ matrix.binary }}
- asset_content_type: application/octet-stream
+ GITHUB_TOKEN: ${{ steps.generate_write_token.outputs.token }}
+ working-directory: ${{ github.workspace}}/release-artifacts/${{ matrix.target }}/${{ matrix.binary }}
+ run: |
+ if [[ ${{ matrix.target }} == "aarch64-apple-darwin" ]]; then
+ gh release upload ${{ needs.validate-inputs.outputs.release_tag }} \
+ --repo paritytech/polkadot-sdk \
+ ${{ matrix.binary }}-aarch64-apple-darwin \
+ ${{ matrix.binary }}-aarch64-apple-darwin.asc \
+ ${{ matrix.binary }}-aarch64-apple-darwin.sha256
+ else
+ gh release upload ${{ needs.validate-inputs.outputs.release_tag }} \
+ --repo paritytech/polkadot-sdk \
+ ${{ matrix.binary }} \
+ ${{ matrix.binary }}.asc \
+ ${{ matrix.binary }}.sha256
+ fi
post_to_matrix:
runs-on: ubuntu-latest
- needs: publish-release-draft
+ needs: [ validate-inputs, publish-release-draft ]
environment: release
strategy:
matrix:
@@ -197,5 +255,5 @@ jobs:
access_token: ${{ secrets.RELEASENOTES_MATRIX_V2_ACCESS_TOKEN }}
server: m.parity.io
message: |
- **New version of polkadot tagged**: ${{ github.ref_name }}
- Draft release created: ${{ needs.publish-release-draft.outputs.release_url }}
+ **New version of polkadot tagged**: ${{ needs.validate-inputs.outputs.release_tag }}
+ And release draft is release created in [polkadot-sdk repo](https://github.com/paritytech/polkadot-sdk/releases)
diff --git a/.github/workflows/release-31_promote-rc-to-final.yml b/.github/workflows/release-31_promote-rc-to-final.yml
new file mode 100644
index 000000000000..6aa9d4bddd1d
--- /dev/null
+++ b/.github/workflows/release-31_promote-rc-to-final.yml
@@ -0,0 +1,125 @@
+name: Release - Promote RC to final candidate on S3
+
+on:
+ workflow_dispatch:
+ inputs:
+ binary:
+ description: Binary to be build for the release
+ default: all
+ type: choice
+ options:
+ - polkadot
+ - polkadot-parachain
+ - polkadot-omni-node
+ - frame-omni-bencher
+ - chain-spec-builder
+ - all
+ release_tag:
+ description: Tag matching the actual release candidate with the format polkadot-stableYYMM(-X)-rcX
+ type: string
+
+
+jobs:
+
+ check-synchronization:
+ uses: paritytech-release/sync-workflows/.github/workflows/check-syncronization.yml@main
+
+ validate-inputs:
+ needs: [ check-synchronization ]
+ if: ${{ needs.check-synchronization.outputs.checks_passed }} == 'true'
+ runs-on: ubuntu-latest
+ outputs:
+ release_tag: ${{ steps.validate_inputs.outputs.release_tag }}
+ final_tag: ${{ steps.validate_inputs.outputs.final_tag }}
+
+ steps:
+ - name: Checkout sources
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Validate inputs
+ id: validate_inputs
+ run: |
+ . ./.github/scripts/common/lib.sh
+
+ RELEASE_TAG=$(validate_stable_tag ${{ inputs.release_tag }})
+ echo "release_tag=${RELEASE_TAG}" >> $GITHUB_OUTPUT
+
+ promote-polkadot-rc-to-final:
+ if: ${{ inputs.binary == 'polkadot' || inputs.binary == 'all' }}
+ needs: [ validate-inputs ]
+ uses: ./.github/workflows/release-reusable-promote-to-final.yml
+ strategy:
+ matrix:
+ target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ]
+ with:
+ package: polkadot
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: ${{ matrix.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+
+ promote-polkadot-parachain-rc-to-final:
+ if: ${{ inputs.binary == 'polkadot-parachain' || inputs.binary == 'all' }}
+ needs: [ validate-inputs ]
+ uses: ./.github/workflows/release-reusable-promote-to-final.yml
+ strategy:
+ matrix:
+ target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ]
+ with:
+ package: polkadot-parachain
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: ${{ matrix.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+
+ promote-polkadot-omni-node-rc-to-final:
+ if: ${{ inputs.binary == 'polkadot-omni-node' || inputs.binary == 'all' }}
+ needs: [ validate-inputs ]
+ uses: ./.github/workflows/release-reusable-promote-to-final.yml
+ strategy:
+ matrix:
+ target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ]
+ with:
+ package: polkadot-omni-node
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: ${{ matrix.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+
+ promote-frame-omni-bencher-rc-to-final:
+ if: ${{ inputs.binary == 'frame-omni-bencher' || inputs.binary == 'all' }}
+ needs: [ validate-inputs ]
+ uses: ./.github/workflows/release-reusable-promote-to-final.yml
+ strategy:
+ matrix:
+ target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ]
+ with:
+ package: frame-omni-bencher
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: ${{ matrix.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+
+ promote-chain-spec-builder-rc-to-final:
+ if: ${{ inputs.binary == 'chain-spec-builder' || inputs.binary == 'all' }}
+ needs: [ validate-inputs ]
+ uses: ./.github/workflows/release-reusable-promote-to-final.yml
+ strategy:
+ matrix:
+ target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ]
+ with:
+ package: chain-spec-builder
+ release_tag: ${{ needs.validate-inputs.outputs.release_tag }}
+ target: ${{ matrix.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
diff --git a/.github/workflows/release-50_publish-docker.yml b/.github/workflows/release-50_publish-docker.yml
index 627e53bacd88..a3c49598d6b1 100644
--- a/.github/workflows/release-50_publish-docker.yml
+++ b/.github/workflows/release-50_publish-docker.yml
@@ -4,10 +4,6 @@ name: Release - Publish Docker Image
# It builds and published releases and rc candidates.
on:
- #TODO: activate automated run later
- # release:
- # types:
- # - published
workflow_dispatch:
inputs:
image_type:
@@ -30,16 +26,6 @@ on:
- polkadot-parachain
- chain-spec-builder
- release_id:
- description: |
- Release ID.
- You can find it using the command:
- curl -s \
- -H "Authorization: Bearer ${GITHUB_TOKEN}" https://api.github.com/repos/$OWNER/$REPO/releases | \
- jq '.[] | { name: .name, id: .id }'
- required: true
- type: number
-
registry:
description: Container registry
required: true
@@ -55,12 +41,12 @@ on:
default: parity
version:
- description: version to build/release
+ description: Version of the polkadot node release in format v1.16.0 or v1.16.0-rc1
default: v0.9.18
required: true
stable_tag:
- description: Tag matching the actual stable release version in the format stableYYMM or stableYYMM-X for patch releases
+ description: Tag matching the actual stable release version in the format polkadpt-stableYYMM(-rcX) or plkadot-stableYYMM-X(-rcX) for patch releases
required: true
permissions:
@@ -78,11 +64,15 @@ env:
IMAGE_TYPE: ${{ inputs.image_type }}
jobs:
+ check-synchronization:
+ uses: paritytech-release/sync-workflows/.github/workflows/check-syncronization.yml@main
+
validate-inputs:
+ needs: [check-synchronization]
+ if: ${{ needs.check-synchronization.outputs.checks_passed }} == 'true'
runs-on: ubuntu-latest
outputs:
version: ${{ steps.validate_inputs.outputs.VERSION }}
- release_id: ${{ steps.validate_inputs.outputs.RELEASE_ID }}
stable_tag: ${{ steps.validate_inputs.outputs.stable_tag }}
steps:
@@ -97,11 +87,6 @@ jobs:
VERSION=$(filter_version_from_input "${{ inputs.version }}")
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
- RELEASE_ID=$(check_release_id "${{ inputs.release_id }}")
- echo "RELEASE_ID=${RELEASE_ID}" >> $GITHUB_OUTPUT
-
- echo "Release ID: $RELEASE_ID"
-
STABLE_TAG=$(validate_stable_tag ${{ inputs.stable_tag }})
echo "stable_tag=${STABLE_TAG}" >> $GITHUB_OUTPUT
@@ -114,50 +99,26 @@ jobs:
- name: Checkout sources
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- #TODO: this step will be needed when automated triggering will work
- #this step runs only if the workflow is triggered automatically when new release is published
- # if: ${{ env.EVENT_NAME == 'release' && env.EVENT_ACTION != '' && env.EVENT_ACTION == 'published' }}
- # run: |
- # mkdir -p release-artifacts && cd release-artifacts
-
- # for f in $BINARY $BINARY.asc $BINARY.sha256; do
- # URL="https://github.com/${{ github.event.repository.full_name }}/releases/download/${{ github.event.release.tag_name }}/$f"
- # echo " - Fetching $f from $URL"
- # wget "$URL" -O "$f"
- # done
- # chmod a+x $BINARY
- # ls -al
-
- name: Fetch rc artifacts or release artifacts from s3 based on version
- #this step runs only if the workflow is triggered manually
- if: ${{ env.EVENT_NAME == 'workflow_dispatch' && inputs.binary != 'polkadot-omni-node' && inputs.binary != 'chain-spec-builder'}}
+ # if: ${{ env.EVENT_NAME == 'workflow_dispatch' && inputs.binary != 'polkadot-omni-node' && inputs.binary != 'chain-spec-builder'}}
run: |
. ./.github/scripts/common/lib.sh
- VERSION="${{ needs.validate-inputs.outputs.VERSION }}"
+ VERSION="${{ needs.validate-inputs.outputs.stable_tag }}"
if [[ ${{ inputs.binary }} == 'polkadot' ]]; then
bins=(polkadot polkadot-prepare-worker polkadot-execute-worker)
for bin in "${bins[@]}"; do
- fetch_release_artifacts_from_s3 $bin
+ fetch_release_artifacts_from_s3 $bin x86_64-unknown-linux-gnu
done
else
- fetch_release_artifacts_from_s3 $BINARY
+ fetch_release_artifacts_from_s3 $BINARY x86_64-unknown-linux-gnu
fi
- - name: Fetch polkadot-omni-node/chain-spec-builder rc artifacts or release artifacts based on release id
- #this step runs only if the workflow is triggered manually and only for chain-spec-builder
- if: ${{ env.EVENT_NAME == 'workflow_dispatch' && (inputs.binary == 'polkadot-omni-node' || inputs.binary == 'chain-spec-builder') }}
- run: |
- . ./.github/scripts/common/lib.sh
-
- RELEASE_ID="${{ needs.validate-inputs.outputs.RELEASE_ID }}"
- fetch_release_artifacts
-
- name: Upload artifacts
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: release-artifacts
- path: release-artifacts/${{ env.BINARY }}/**/*
+ path: release-artifacts/x86_64-unknown-linux-gnu/${{ env.BINARY }}/**/*
build-container: # this job will be triggered for the polkadot-parachain rc and release or polkadot rc image build
if: ${{ inputs.binary == 'polkadot-omni-node' || inputs.binary == 'polkadot-parachain' || inputs.binary == 'chain-spec-builder' || inputs.image_type == 'rc' }}
@@ -173,7 +134,7 @@ jobs:
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Check sha256 ${{ env.BINARY }}
- if: ${{ inputs.binary == 'polkadot-parachain' || inputs.binary == 'polkadot' }}
+ # if: ${{ inputs.binary == 'polkadot-parachain' || inputs.binary == 'polkadot' }}
working-directory: release-artifacts
run: |
. ../.github/scripts/common/lib.sh
@@ -182,7 +143,7 @@ jobs:
check_sha256 $BINARY && echo "OK" || echo "ERR"
- name: Check GPG ${{ env.BINARY }}
- if: ${{ inputs.binary == 'polkadot-parachain' || inputs.binary == 'polkadot' }}
+ # if: ${{ inputs.binary == 'polkadot-parachain' || inputs.binary == 'polkadot' }}
working-directory: release-artifacts
run: |
. ../.github/scripts/common/lib.sh
@@ -190,35 +151,29 @@ jobs:
check_gpg $BINARY
- name: Fetch rc commit and tag
+ working-directory: release-artifacts
if: ${{ env.IMAGE_TYPE == 'rc' }}
id: fetch_rc_refs
+ shell: bash
run: |
- . ./.github/scripts/common/lib.sh
-
- echo "release=${{ needs.validate-inputs.outputs.stable_tag }}" >> $GITHUB_OUTPUT
+ . ../.github/scripts/common/lib.sh
commit=$(git rev-parse --short HEAD) && \
echo "commit=${commit}" >> $GITHUB_OUTPUT
-
- echo "tag=${{ needs.validate-inputs.outputs.version }}" >> $GITHUB_OUTPUT
+ echo "release=$(echo ${{ needs.validate-inputs.outputs.version }})" >> $GITHUB_OUTPUT
+ echo "tag=$(prepare_docker_stable_tag ${{ needs.validate-inputs.outputs.stable_tag }})" >> $GITHUB_OUTPUT
- name: Fetch release tags
working-directory: release-artifacts
if: ${{ env.IMAGE_TYPE == 'release'}}
id: fetch_release_refs
+ shell: bash
run: |
- chmod a+rx $BINARY
-
- if [[ $BINARY != 'chain-spec-builder' ]]; then
- VERSION=$(./$BINARY --version | awk '{ print $2 }' )
- release=$( echo $VERSION | cut -f1 -d- )
- else
- release=$(echo ${{ needs.validate-inputs.outputs.VERSION }} | sed 's/^v//')
- fi
+ . ../.github/scripts/common/lib.sh
echo "tag=latest" >> $GITHUB_OUTPUT
- echo "release=${release}" >> $GITHUB_OUTPUT
- echo "stable=${{ needs.validate-inputs.outputs.stable_tag }}" >> $GITHUB_OUTPUT
+ echo "release=$(echo ${{ needs.validate-inputs.outputs.version }})" >> $GITHUB_OUTPUT
+ echo "stable=$(prepare_docker_stable_tag ${{ needs.validate-inputs.outputs.stable_tag }})" >> $GITHUB_OUTPUT
- name: Build Injected Container image for polkadot rc
if: ${{ env.BINARY == 'polkadot' }}
@@ -342,8 +297,10 @@ jobs:
- name: Fetch values
id: fetch-data
run: |
+ . ./.github/scripts/common/lib.sh
date=$(date -u '+%Y-%m-%dT%H:%M:%SZ')
echo "date=$date" >> $GITHUB_OUTPUT
+ echo "stable=$(prepare_docker_stable_tag ${{ needs.validate-inputs.outputs.stable_tag }})" >> $GITHUB_OUTPUT
- name: Build and push
id: docker_build
@@ -354,7 +311,7 @@ jobs:
# TODO: The owner should be used below but buildx does not resolve the VARs
# TODO: It would be good to get rid of this GHA that we don't really need.
tags: |
- parity/polkadot:${{ needs.validate-inputs.outputs.stable_tag }}
+ parity/polkadot:${{ steps.fetch-data.outputs.stable }}
parity/polkadot:latest
parity/polkadot:${{ needs.fetch-latest-debian-package-version.outputs.polkadot_container_tag }}
build-args: |
diff --git a/.github/workflows/release-reusable-promote-to-final.yml b/.github/workflows/release-reusable-promote-to-final.yml
new file mode 100644
index 000000000000..ed4a80a01e82
--- /dev/null
+++ b/.github/workflows/release-reusable-promote-to-final.yml
@@ -0,0 +1,83 @@
+name: Promote rc to final
+
+on:
+ workflow_call:
+ inputs:
+ package:
+ description: Package to be promoted
+ required: true
+ type: string
+
+ release_tag:
+ description: Tag matching the actual release candidate with the format polkadot-stableYYMM(-X)-rcX taht will be changed to final in form of polkadot-stableYYMM(-X)
+ required: true
+ type: string
+
+ target:
+ description: Target triple for which the artifacts are being uploaded (e.g aarch64-apple-darwin)
+ required: true
+ type: string
+
+ secrets:
+ AWS_DEFAULT_REGION:
+ required: true
+ AWS_RELEASE_ACCESS_KEY_ID:
+ required: true
+ AWS_RELEASE_SECRET_ACCESS_KEY:
+ required: true
+
+jobs:
+
+ promote-release-artifacts:
+ environment: release
+ runs-on: ubuntu-latest
+ env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+ AWS_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+
+ steps:
+ - name: Checkout sources
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Prepare final tag
+ id: prepare_final_tag
+ shell: bash
+ run: |
+ tag="$(echo ${{ inputs.release_tag }} | sed 's/-rc[0-9]*$//')"
+ echo $tag
+ echo "FINAL_TAG=${tag}" >> $GITHUB_OUTPUT
+
+ - name: Fetch binaries from s3 based on version
+ run: |
+ . ./.github/scripts/common/lib.sh
+
+ VERSION="${{ inputs.release_tag }}"
+ if [[ ${{ inputs.package }} == 'polkadot' ]]; then
+ packages=(polkadot polkadot-prepare-worker polkadot-execute-worker)
+ for package in "${packages[@]}"; do
+ fetch_release_artifacts_from_s3 $package ${{ inputs.target }}
+ done
+ else
+ fetch_release_artifacts_from_s3 ${{ inputs.package }} ${{ inputs.target }}
+ fi
+
+ - name: Configure AWS Credentials
+ uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
+ with:
+ aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }}
+ aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }}
+ aws-region: ${{ env.AWS_REGION }}
+
+ - name: Upload ${{ inputs.package }} ${{ inputs.target }} artifacts to s3
+ run: |
+ . ./.github/scripts/release/release_lib.sh
+
+ if [[ ${{ inputs.package }} == 'polkadot' ]]; then
+ packages=(polkadot polkadot-prepare-worker polkadot-execute-worker)
+ for package in "${packages[@]}"; do
+ upload_s3_release $package ${{ steps.prepare_final_tag.outputs.final_tag }} ${{ inputs.target }}
+ done
+ else
+ upload_s3_release ${{ inputs.package }} ${{ steps.prepare_final_tag.outputs.final_tag }} ${{ inputs.target }}
+ fi
diff --git a/.github/workflows/release-reusable-rc-buid.yml b/.github/workflows/release-reusable-rc-buid.yml
index 7e31a4744b59..0222b2aa91e2 100644
--- a/.github/workflows/release-reusable-rc-buid.yml
+++ b/.github/workflows/release-reusable-rc-buid.yml
@@ -104,7 +104,7 @@ jobs:
./.github/scripts/release/build-linux-release.sh ${{ matrix.binaries }} ${{ inputs.package }}
- name: Generate artifact attestation
- uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
+ uses: actions/attest-build-provenance@ef244123eb79f2f7a7e75d99086184180e6d0018 # v1.4.4
with:
subject-path: /artifacts/${{ matrix.binaries }}/${{ matrix.binaries }}
@@ -133,7 +133,7 @@ jobs:
- name: Upload ${{ matrix.binaries }} artifacts
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
- name: ${{ matrix.binaries }}
+ name: ${{ matrix.binaries }}_${{ inputs.target }}
path: /artifacts/${{ matrix.binaries }}
build-macos-rc:
@@ -220,7 +220,7 @@ jobs:
./.github/scripts/release/build-macos-release.sh ${{ matrix.binaries }} ${{ inputs.package }}
- name: Generate artifact attestation
- uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
+ uses: actions/attest-build-provenance@ef244123eb79f2f7a7e75d99086184180e6d0018 # v1.4.4
with:
subject-path: ${{ env.ARTIFACTS_PATH }}/${{ matrix.binaries }}
@@ -278,14 +278,14 @@ jobs:
. "${GITHUB_WORKSPACE}"/.github/scripts/release/build-deb.sh ${{ inputs.package }} ${VERSION}
- name: Generate artifact attestation
- uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
+ uses: actions/attest-build-provenance@ef244123eb79f2f7a7e75d99086184180e6d0018 # v1.4.4
with:
subject-path: target/production/*.deb
- name: Upload ${{inputs.package }} artifacts
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
- name: ${{ inputs.package }}
+ name: ${{ inputs.package }}_${{ inputs.target }}
path: target/production
overwrite: true
@@ -302,7 +302,6 @@ jobs:
AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
-
upload-polkadot-parachain-artifacts-to-s3:
if: ${{ inputs.package == 'polkadot-parachain-bin' && inputs.target == 'x86_64-unknown-linux-gnu' }}
needs: [build-rc]
@@ -329,6 +328,32 @@ jobs:
AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+ upload-frame-omni-bencher-artifacts-to-s3:
+ if: ${{ inputs.package == 'frame-omni-bencher' && inputs.target == 'x86_64-unknown-linux-gnu' }}
+ needs: [build-rc]
+ uses: ./.github/workflows/release-reusable-s3-upload.yml
+ with:
+ package: ${{ inputs.package }}
+ release_tag: ${{ inputs.release_tag }}
+ target: ${{ inputs.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+
+ upload-chain-spec-builder-artifacts-to-s3:
+ if: ${{ inputs.package == 'staging-chain-spec-builder' && inputs.target == 'x86_64-unknown-linux-gnu' }}
+ needs: [build-rc]
+ uses: ./.github/workflows/release-reusable-s3-upload.yml
+ with:
+ package: chain-spec-builder
+ release_tag: ${{ inputs.release_tag }}
+ target: ${{ inputs.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+
upload-polkadot-macos-artifacts-to-s3:
if: ${{ inputs.package == 'polkadot' && inputs.target == 'aarch64-apple-darwin' }}
# TODO: add and use a `build-polkadot-homebrew-package` which packs all `polkadot` binaries:
@@ -395,3 +420,29 @@ jobs:
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+
+ upload-frame-omni-bencher-macos-artifacts-to-s3:
+ if: ${{ inputs.package == 'frame-omni-bencher' && inputs.target == 'aarch64-apple-darwin' }}
+ needs: [build-macos-rc]
+ uses: ./.github/workflows/release-reusable-s3-upload.yml
+ with:
+ package: ${{ inputs.package }}
+ release_tag: ${{ inputs.release_tag }}
+ target: ${{ inputs.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
+
+ upload-chain-spec-builder-macos-artifacts-to-s3:
+ if: ${{ inputs.package == 'staging-chain-spec-builder' && inputs.target == 'aarch64-apple-darwin' }}
+ needs: [build-macos-rc]
+ uses: ./.github/workflows/release-reusable-s3-upload.yml
+ with:
+ package: chain-spec-builder
+ release_tag: ${{ inputs.release_tag }}
+ target: ${{ inputs.target }}
+ secrets:
+ AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
+ AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }}
+ AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }}
diff --git a/.github/workflows/release-reusable-s3-upload.yml b/.github/workflows/release-reusable-s3-upload.yml
index f85466bc8c07..48c7e53c6c8f 100644
--- a/.github/workflows/release-reusable-s3-upload.yml
+++ b/.github/workflows/release-reusable-s3-upload.yml
@@ -9,7 +9,7 @@ on:
type: string
release_tag:
- description: Tag matching the actual release candidate with the format stableYYMM-rcX or stableYYMM-rcX
+ description: Tag matching the actual release candidate with the format polkadot-stableYYMM(-X)-rcX or polkadot-stableYYMM-rcX
required: true
type: string
@@ -40,18 +40,10 @@ jobs:
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Download amd64 artifacts
- if: ${{ inputs.target == 'x86_64-unknown-linux-gnu' }}
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
- name: ${{ inputs.package }}
- path: artifacts/${{ inputs.package }}
-
- - name: Download arm artifacts
- if: ${{ inputs.target == 'aarch64-apple-darwin' }}
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- with:
- name: ${{ inputs.package }}_aarch64-apple-darwin
- path: artifacts/${{ inputs.package }}
+ name: ${{ inputs.package }}_${{ inputs.target }}
+ path: release-artifacts/${{ inputs.target }}/${{ inputs.package }}
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
diff --git a/.github/workflows/release-srtool.yml b/.github/workflows/release-srtool.yml
index 9a29b46d2fc3..fc10496d481b 100644
--- a/.github/workflows/release-srtool.yml
+++ b/.github/workflows/release-srtool.yml
@@ -1,7 +1,7 @@
name: Srtool build
env:
- SUBWASM_VERSION: 0.20.0
+ SUBWASM_VERSION: 0.21.0
TOML_CLI_VERSION: 0.2.4
on:
@@ -11,14 +11,16 @@ on:
type: string
build_opts:
type: string
+ profile:
+ type: string
outputs:
published_runtimes:
value: ${{ jobs.find-runtimes.outputs.runtime }}
- schedule:
- - cron: "00 02 * * 1" # 2AM weekly on monday
-
- workflow_dispatch:
+permissions:
+ id-token: write
+ attestations: write
+ contents: read
jobs:
find-runtimes:
@@ -75,6 +77,7 @@ jobs:
with:
chain: ${{ matrix.chain }}
runtime_dir: ${{ matrix.runtime_dir }}
+ profile: ${{ inputs.profile }}
- name: Summary
run: |
@@ -83,6 +86,11 @@ jobs:
echo "Compact Runtime: ${{ steps.srtool_build.outputs.wasm }}"
echo "Compressed Runtime: ${{ steps.srtool_build.outputs.wasm_compressed }}"
+ - name: Generate artifact attestation
+ uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
+ with:
+ subject-path: ${{ steps.srtool_build.outputs.wasm }}
+
# We now get extra information thanks to subwasm
- name: Install subwasm
run: |
diff --git a/.github/workflows/runtimes-matrix.json b/.github/workflows/runtimes-matrix.json
index f991db55b86d..104e73521331 100644
--- a/.github/workflows/runtimes-matrix.json
+++ b/.github/workflows/runtimes-matrix.json
@@ -8,6 +8,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "--genesis-builder-policy=none --exclude-pallets=pallet_xcm,pallet_xcm_benchmarks::fungible,pallet_xcm_benchmarks::generic,pallet_nomination_pools,pallet_remark,pallet_transaction_storage",
"uri": null,
+ "old_package": "staging-node-cli",
+ "old_bin": "substrate-node",
"is_relay": false
},
{
@@ -19,6 +21,8 @@
"bench_flags": "",
"bench_features": "runtime-benchmarks",
"uri": "wss://try-runtime-westend.polkadot.io:443",
+ "old_package": "polkadot",
+ "old_bin": "polkadot",
"is_relay": true
},
{
@@ -27,9 +31,11 @@
"path": "polkadot/runtime/rococo",
"header": "polkadot/file_header.txt",
"template": "polkadot/xcm/pallet-xcm-benchmarks/template.hbs",
- "uri": "wss://try-runtime-rococo.polkadot.io:443",
"bench_features": "runtime-benchmarks",
"bench_flags": "",
+ "uri": "wss://try-runtime-rococo.polkadot.io:443",
+ "old_package": "polkadot",
+ "old_bin": "polkadot",
"is_relay": true
},
{
@@ -41,6 +47,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "",
"uri": "wss://westend-asset-hub-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -52,6 +60,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "",
"uri": "wss://rococo-asset-hub-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -63,6 +73,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "",
"uri": "wss://rococo-bridge-hub-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -74,6 +86,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "",
"uri": "wss://westend-bridge-hub-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -84,7 +98,10 @@
"template": "cumulus/templates/xcm-bench-template.hbs",
"bench_features": "runtime-benchmarks",
"bench_flags": "",
- "uri": "wss://westend-collectives-rpc.polkadot.io:443"
+ "uri": "wss://westend-collectives-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
+ "is_relay": false
},
{
"name": "contracts-rococo",
@@ -95,6 +112,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "--genesis-builder-policy=none --exclude-pallets=pallet_xcm",
"uri": "wss://rococo-contracts-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -106,6 +125,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "--genesis-builder-policy=none --exclude-pallets=pallet_xcm,pallet_xcm_benchmarks::fungible,pallet_xcm_benchmarks::generic",
"uri": "wss://rococo-coretime-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -117,6 +138,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "--genesis-builder-policy=none --exclude-pallets=pallet_xcm,pallet_xcm_benchmarks::fungible,pallet_xcm_benchmarks::generic",
"uri": "wss://westend-coretime-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -128,6 +151,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "--genesis-builder-policy=none",
"uri": null,
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -139,6 +164,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "--genesis-builder-policy=none --exclude-pallets=pallet_xcm,pallet_xcm_benchmarks::fungible,pallet_xcm_benchmarks::generic",
"uri": "wss://rococo-people-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
},
{
@@ -150,6 +177,8 @@
"bench_features": "runtime-benchmarks",
"bench_flags": "--genesis-builder-policy=none --exclude-pallets=pallet_xcm,pallet_xcm_benchmarks::fungible,pallet_xcm_benchmarks::generic",
"uri": "wss://westend-people-rpc.polkadot.io:443",
+ "old_package": "polkadot-parachain-bin",
+ "old_bin": "polkadot-parachain",
"is_relay": false
}
]
diff --git a/.github/workflows/tests-linux-stable-coverage.yml b/.github/workflows/tests-linux-stable-coverage.yml
index c5af6bcae77f..61e01cda4428 100644
--- a/.github/workflows/tests-linux-stable-coverage.yml
+++ b/.github/workflows/tests-linux-stable-coverage.yml
@@ -102,7 +102,7 @@ jobs:
merge-multiple: true
- run: ls -al reports/
- name: Upload to Codecov
- uses: codecov/codecov-action@v4
+ uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
verbose: true
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f508404f1efa..42a7e87bda43 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -22,7 +22,7 @@ workflow:
variables:
# CI_IMAGE: !reference [ .ci-unified, variables, CI_IMAGE ]
- CI_IMAGE: "docker.io/paritytech/ci-unified:bullseye-1.81.0-2024-09-11-v202409111034"
+ CI_IMAGE: "docker.io/paritytech/ci-unified:bullseye-1.81.0-2024-11-19-v202411281558"
# BUILDAH_IMAGE is defined in group variables
BUILDAH_COMMAND: "buildah --storage-driver overlay2"
RELENG_SCRIPTS_BRANCH: "master"
diff --git a/.gitlab/pipeline/zombienet/parachain-template.yml b/.gitlab/pipeline/zombienet/parachain-template.yml
index 896ba7913be7..d5c1b6558b39 100644
--- a/.gitlab/pipeline/zombienet/parachain-template.yml
+++ b/.gitlab/pipeline/zombienet/parachain-template.yml
@@ -43,4 +43,4 @@ zombienet-parachain-template-smoke:
- ls -ltr $(pwd)/artifacts
- cargo test -p template-zombienet-tests --features zombienet --tests minimal_template_block_production_test
- cargo test -p template-zombienet-tests --features zombienet --tests parachain_template_block_production_test
- # - cargo test -p template-zombienet-tests --features zombienet --tests solochain_template_block_production_test
+ - cargo test -p template-zombienet-tests --features zombienet --tests solochain_template_block_production_test
diff --git a/.gitlab/pipeline/zombienet/polkadot.yml b/.gitlab/pipeline/zombienet/polkadot.yml
index 3dab49a118e5..14a235bcda86 100644
--- a/.gitlab/pipeline/zombienet/polkadot.yml
+++ b/.gitlab/pipeline/zombienet/polkadot.yml
@@ -63,6 +63,8 @@
LOCAL_SDK_TEST: "/builds/parity/mirrors/polkadot-sdk/polkadot/zombienet-sdk-tests"
FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: 1
RUN_IN_CONTAINER: "1"
+ # don't retry sdk tests
+ NEXTEST_RETRIES: 0
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
when: always
@@ -179,7 +181,7 @@ zombienet-polkadot-elastic-scaling-0001-basic-3cores-6s-blocks:
--local-dir="${LOCAL_DIR}/elastic_scaling"
--test="0001-basic-3cores-6s-blocks.zndsl"
-zombienet-polkadot-elastic-scaling-0002-elastic-scaling-doesnt-break-parachains:
+.zombienet-polkadot-elastic-scaling-0002-elastic-scaling-doesnt-break-parachains:
extends:
- .zombienet-polkadot-common
before_script:
@@ -190,6 +192,7 @@ zombienet-polkadot-elastic-scaling-0002-elastic-scaling-doesnt-break-parachains:
--local-dir="${LOCAL_DIR}/elastic_scaling"
--test="0002-elastic-scaling-doesnt-break-parachains.zndsl"
+
.zombienet-polkadot-functional-0012-spam-statement-distribution-requests:
extends:
- .zombienet-polkadot-common
@@ -233,7 +236,7 @@ zombienet-polkadot-functional-0015-coretime-shared-core:
--local-dir="${LOCAL_DIR}/functional"
--test="0016-approval-voting-parallel.zndsl"
-zombienet-polkadot-functional-0017-sync-backing:
+.zombienet-polkadot-functional-0017-sync-backing:
extends:
- .zombienet-polkadot-common
script:
@@ -252,6 +255,17 @@ zombienet-polkadot-functional-0018-shared-core-idle-parachain:
--local-dir="${LOCAL_DIR}/functional"
--test="0018-shared-core-idle-parachain.zndsl"
+zombienet-polkadot-functional-0019-coretime-collation-fetching-fairness:
+ extends:
+ - .zombienet-polkadot-common
+ before_script:
+ - !reference [ .zombienet-polkadot-common, before_script ]
+ - cp --remove-destination ${LOCAL_DIR}/assign-core.js ${LOCAL_DIR}/functional
+ script:
+ - /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh
+ --local-dir="${LOCAL_DIR}/functional"
+ --test="0019-coretime-collation-fetching-fairness.zndsl"
+
zombienet-polkadot-smoke-0001-parachains-smoke-test:
extends:
- .zombienet-polkadot-common
@@ -386,3 +400,19 @@ zombienet-polkadot-malus-0001-dispute-valid:
- unset NEXTEST_FAILURE_OUTPUT
- unset NEXTEST_SUCCESS_OUTPUT
- cargo nextest run --archive-file ./artifacts/polkadot-zombienet-tests.tar.zst --no-capture -- smoke::coretime_revenue::coretime_revenue_test
+
+zombienet-polkadot-elastic-scaling-slot-based-3cores:
+ extends:
+ - .zombienet-polkadot-common
+ needs:
+ - job: build-polkadot-zombienet-tests
+ artifacts: true
+ before_script:
+ - !reference [ ".zombienet-polkadot-common", "before_script" ]
+ - export POLKADOT_IMAGE="${ZOMBIENET_INTEGRATION_TEST_IMAGE}"
+ - export CUMULUS_IMAGE="docker.io/paritypr/test-parachain:${PIPELINE_IMAGE_TAG}"
+ script:
+ # we want to use `--no-capture` in zombienet tests.
+ - unset NEXTEST_FAILURE_OUTPUT
+ - unset NEXTEST_SUCCESS_OUTPUT
+ - cargo nextest run --archive-file ./artifacts/polkadot-zombienet-tests.tar.zst --no-capture -- elastic_scaling::slot_based_3cores::slot_based_3cores_test
diff --git a/Cargo.lock b/Cargo.lock
index 8b7d4020004c..aca8159322ad 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -125,6 +125,48 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+[[package]]
+name = "alloy-core"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c618bd382f0bc2ac26a7e4bfae01c9b015ca8f21b37ca40059ae35a7e62b3dc6"
+dependencies = [
+ "alloy-dyn-abi",
+ "alloy-json-abi",
+ "alloy-primitives 0.8.15",
+ "alloy-rlp",
+ "alloy-sol-types 0.8.15",
+]
+
+[[package]]
+name = "alloy-dyn-abi"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41056bde53ae10ffbbf11618efbe1e0290859e5eab0fe9ef82ebdb62f12a866f"
+dependencies = [
+ "alloy-json-abi",
+ "alloy-primitives 0.8.15",
+ "alloy-sol-type-parser",
+ "alloy-sol-types 0.8.15",
+ "const-hex",
+ "itoa",
+ "serde",
+ "serde_json",
+ "winnow 0.6.18",
+]
+
+[[package]]
+name = "alloy-json-abi"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c357da577dfb56998d01f574d81ad7a1958d248740a7981b205d69d65a7da404"
+dependencies = [
+ "alloy-primitives 0.8.15",
+ "alloy-sol-type-parser",
+ "serde",
+ "serde_json",
+]
+
[[package]]
name = "alloy-primitives"
version = "0.4.2"
@@ -145,6 +187,34 @@ dependencies = [
"tiny-keccak",
]
+[[package]]
+name = "alloy-primitives"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6259a506ab13e1d658796c31e6e39d2e2ee89243bcc505ddc613b35732e0a430"
+dependencies = [
+ "alloy-rlp",
+ "bytes",
+ "cfg-if",
+ "const-hex",
+ "derive_more 1.0.0",
+ "foldhash",
+ "hashbrown 0.15.2",
+ "hex-literal",
+ "indexmap 2.7.0",
+ "itoa",
+ "k256",
+ "keccak-asm",
+ "paste",
+ "proptest",
+ "rand",
+ "ruint",
+ "rustc-hash 2.0.0",
+ "serde",
+ "sha3 0.10.8",
+ "tiny-keccak",
+]
+
[[package]]
name = "alloy-rlp"
version = "0.3.3"
@@ -169,18 +239,88 @@ dependencies = [
"proc-macro2 1.0.86",
"quote 1.0.37",
"syn 2.0.87",
- "syn-solidity",
+ "syn-solidity 0.4.2",
"tiny-keccak",
]
+[[package]]
+name = "alloy-sol-macro"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9d64f851d95619233f74b310f12bcf16e0cbc27ee3762b6115c14a84809280a"
+dependencies = [
+ "alloy-sol-macro-expander",
+ "alloy-sol-macro-input",
+ "proc-macro-error2",
+ "proc-macro2 1.0.86",
+ "quote 1.0.37",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "alloy-sol-macro-expander"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bf7ed1574b699f48bf17caab4e6e54c6d12bc3c006ab33d58b1e227c1c3559f"
+dependencies = [
+ "alloy-sol-macro-input",
+ "const-hex",
+ "heck 0.5.0",
+ "indexmap 2.7.0",
+ "proc-macro-error2",
+ "proc-macro2 1.0.86",
+ "quote 1.0.37",
+ "syn 2.0.87",
+ "syn-solidity 0.8.15",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "alloy-sol-macro-input"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c02997ccef5f34f9c099277d4145f183b422938ed5322dc57a089fe9b9ad9ee"
+dependencies = [
+ "const-hex",
+ "dunce",
+ "heck 0.5.0",
+ "proc-macro2 1.0.86",
+ "quote 1.0.37",
+ "syn 2.0.87",
+ "syn-solidity 0.8.15",
+]
+
+[[package]]
+name = "alloy-sol-type-parser"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce13ff37285b0870d0a0746992a4ae48efaf34b766ae4c2640fa15e5305f8e73"
+dependencies = [
+ "serde",
+ "winnow 0.6.18",
+]
+
[[package]]
name = "alloy-sol-types"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98d7107bed88e8f09f0ddcc3335622d87bfb6821f3e0c7473329fb1cfad5e015"
dependencies = [
- "alloy-primitives",
- "alloy-sol-macro",
+ "alloy-primitives 0.4.2",
+ "alloy-sol-macro 0.4.2",
+ "const-hex",
+ "serde",
+]
+
+[[package]]
+name = "alloy-sol-types"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1174cafd6c6d810711b4e00383037bdb458efc4fe3dbafafa16567e0320c54d8"
+dependencies = [
+ "alloy-json-abi",
+ "alloy-primitives 0.8.15",
+ "alloy-sol-macro 0.8.15",
"const-hex",
"serde",
]
@@ -701,30 +841,14 @@ version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
-[[package]]
-name = "asn1-rs"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0"
-dependencies = [
- "asn1-rs-derive 0.4.0",
- "asn1-rs-impl 0.1.0",
- "displaydoc",
- "nom",
- "num-traits",
- "rusticata-macros",
- "thiserror",
- "time",
-]
-
[[package]]
name = "asn1-rs"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22ad1373757efa0f70ec53939aabc7152e1591cb485208052993070ac8d2429d"
dependencies = [
- "asn1-rs-derive 0.5.0",
- "asn1-rs-impl 0.2.0",
+ "asn1-rs-derive",
+ "asn1-rs-impl",
"displaydoc",
"nom",
"num-traits",
@@ -733,18 +857,6 @@ dependencies = [
"time",
]
-[[package]]
-name = "asn1-rs-derive"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c"
-dependencies = [
- "proc-macro2 1.0.86",
- "quote 1.0.37",
- "syn 1.0.109",
- "synstructure 0.12.6",
-]
-
[[package]]
name = "asn1-rs-derive"
version = "0.5.0"
@@ -757,17 +869,6 @@ dependencies = [
"synstructure 0.13.1",
]
-[[package]]
-name = "asn1-rs-impl"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
-dependencies = [
- "proc-macro2 1.0.86",
- "quote 1.0.37",
- "syn 1.0.109",
-]
-
[[package]]
name = "asn1-rs-impl"
version = "0.2.0"
@@ -855,6 +956,7 @@ dependencies = [
"bp-asset-hub-westend",
"bp-bridge-hub-rococo",
"bp-bridge-hub-westend",
+ "bp-xcm-bridge-hub 0.2.0",
"cumulus-pallet-aura-ext 0.7.0",
"cumulus-pallet-parachain-system 0.7.0",
"cumulus-pallet-session-benchmarking 9.0.0",
@@ -991,6 +1093,7 @@ dependencies = [
"bp-asset-hub-westend",
"bp-bridge-hub-rococo",
"bp-bridge-hub-westend",
+ "bp-xcm-bridge-hub 0.2.0",
"cumulus-pallet-aura-ext 0.7.0",
"cumulus-pallet-parachain-system 0.7.0",
"cumulus-pallet-session-benchmarking 9.0.0",
@@ -1295,7 +1398,7 @@ dependencies = [
"futures-lite 2.3.0",
"parking",
"polling 3.4.0",
- "rustix 0.38.25",
+ "rustix 0.38.21",
"slab",
"tracing",
"windows-sys 0.52.0",
@@ -1377,7 +1480,7 @@ dependencies = [
"cfg-if",
"event-listener 5.3.1",
"futures-lite 2.3.0",
- "rustix 0.38.25",
+ "rustix 0.38.21",
"tracing",
]
@@ -1393,7 +1496,7 @@ dependencies = [
"cfg-if",
"futures-core",
"futures-io",
- "rustix 0.38.25",
+ "rustix 0.38.21",
"signal-hook-registry",
"slab",
"windows-sys 0.52.0",
@@ -1478,6 +1581,19 @@ dependencies = [
"pin-project-lite",
]
+[[package]]
+name = "asynchronous-codec"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233"
+dependencies = [
+ "bytes",
+ "futures-sink",
+ "futures-util",
+ "memchr",
+ "pin-project-lite",
+]
+
[[package]]
name = "atomic-take"
version = "1.1.0"
@@ -1933,10 +2049,26 @@ dependencies = [
[[package]]
name = "bp-asset-hub-rococo"
version = "0.4.0"
+dependencies = [
+ "bp-xcm-bridge-hub-router 0.6.0",
+ "frame-support 28.0.0",
+ "parity-scale-codec",
+ "scale-info",
+ "sp-core 28.0.0",
+ "staging-xcm 7.0.0",
+]
[[package]]
name = "bp-asset-hub-westend"
version = "0.3.0"
+dependencies = [
+ "bp-xcm-bridge-hub-router 0.6.0",
+ "frame-support 28.0.0",
+ "parity-scale-codec",
+ "scale-info",
+ "sp-core 28.0.0",
+ "staging-xcm 7.0.0",
+]
[[package]]
name = "bp-beefy"
@@ -2530,6 +2662,7 @@ dependencies = [
"bp-rococo",
"bp-runtime 0.7.0",
"bp-westend",
+ "bp-xcm-bridge-hub-router 0.6.0",
"bridge-hub-common 0.1.0",
"bridge-hub-test-utils 0.7.0",
"bridge-runtime-common 0.7.0",
@@ -2768,6 +2901,7 @@ dependencies = [
"bp-rococo",
"bp-runtime 0.7.0",
"bp-westend",
+ "bp-xcm-bridge-hub-router 0.6.0",
"bridge-hub-common 0.1.0",
"bridge-hub-test-utils 0.7.0",
"bridge-runtime-common 0.7.0",
@@ -2984,6 +3118,9 @@ name = "bytes"
version = "1.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3"
+dependencies = [
+ "serde",
+]
[[package]]
name = "bzip2-sys"
@@ -3116,6 +3253,12 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+[[package]]
+name = "cfg_aliases"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
[[package]]
name = "chacha"
version = "0.3.0"
@@ -3154,6 +3297,7 @@ dependencies = [
name = "chain-spec-guide-runtime"
version = "0.0.0"
dependencies = [
+ "cmd_lib",
"docify",
"frame-support 28.0.0",
"pallet-balances 28.0.0",
@@ -3741,9 +3885,9 @@ dependencies = [
[[package]]
name = "const-hex"
-version = "1.10.0"
+version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5104de16b218eddf8e34ffe2f86f74bfa4e61e95a1b89732fccf6325efd0557"
+checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -4495,6 +4639,7 @@ dependencies = [
"sp-runtime 31.0.1",
"sp-state-machine 0.35.0",
"sp-timestamp 26.0.0",
+ "sp-trie 29.0.0",
"substrate-prometheus-endpoint",
"tokio",
"tracing",
@@ -4794,7 +4939,6 @@ dependencies = [
"pallet-message-queue 31.0.0",
"parity-scale-codec",
"polkadot-parachain-primitives 6.0.0",
- "polkadot-runtime-common 7.0.0",
"polkadot-runtime-parachains 7.0.0",
"rand",
"sc-client-api",
@@ -5745,9 +5889,9 @@ dependencies = [
[[package]]
name = "data-encoding"
-version = "2.4.0"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
[[package]]
name = "data-encoding-macro"
@@ -5788,27 +5932,13 @@ dependencies = [
"zeroize",
]
-[[package]]
-name = "der-parser"
-version = "8.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e"
-dependencies = [
- "asn1-rs 0.5.2",
- "displaydoc",
- "nom",
- "num-bigint",
- "num-traits",
- "rusticata-macros",
-]
-
[[package]]
name = "der-parser"
version = "9.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553"
dependencies = [
- "asn1-rs 0.6.1",
+ "asn1-rs",
"displaydoc",
"nom",
"num-bigint",
@@ -5964,6 +6094,15 @@ dependencies = [
"dirs-sys-next",
]
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
[[package]]
name = "dirs-sys"
version = "0.4.1"
@@ -6267,18 +6406,6 @@ dependencies = [
"cfg-if",
]
-[[package]]
-name = "enum-as-inner"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
-dependencies = [
- "heck 0.4.1",
- "proc-macro2 1.0.86",
- "quote 1.0.37",
- "syn 1.0.109",
-]
-
[[package]]
name = "enum-as-inner"
version = "0.6.0"
@@ -6661,7 +6788,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303"
dependencies = [
"expander",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"proc-macro-crate 3.1.0",
"proc-macro2 1.0.86",
"quote 1.0.37",
@@ -6852,6 +6979,12 @@ version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+[[package]]
+name = "foldhash"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2"
+
[[package]]
name = "foreign-types"
version = "0.3.2"
@@ -6996,6 +7129,7 @@ dependencies = [
"sc-client-db",
"sc-executor 0.32.0",
"sc-executor-common 0.29.0",
+ "sc-runtime-utilities",
"sc-service",
"sc-sysinfo",
"serde",
@@ -7411,7 +7545,7 @@ dependencies = [
"macro_magic",
"parity-scale-codec",
"pretty_assertions",
- "proc-macro-warning 1.0.0",
+ "proc-macro-warning",
"proc-macro2 1.0.86",
"quote 1.0.37",
"regex",
@@ -7438,7 +7572,7 @@ dependencies = [
"frame-support-procedural-tools 13.0.0",
"itertools 0.11.0",
"macro_magic",
- "proc-macro-warning 1.0.0",
+ "proc-macro-warning",
"proc-macro2 1.0.86",
"quote 1.0.37",
"sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -7688,7 +7822,7 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29f9df8a11882c4e3335eb2d18a0137c505d9ca927470b0cac9c6f0ae07d28f7"
dependencies = [
- "rustix 0.38.25",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
@@ -7721,9 +7855,9 @@ dependencies = [
[[package]]
name = "futures-bounded"
-version = "0.1.0"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b07bbbe7d7e78809544c6f718d875627addc73a7c3582447abc052cd3dc67e0"
+checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e"
dependencies = [
"futures-timer",
"futures-util",
@@ -7804,12 +7938,13 @@ dependencies = [
[[package]]
name = "futures-rustls"
-version = "0.24.0"
+version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28"
+checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb"
dependencies = [
"futures-io",
- "rustls 0.21.7",
+ "rustls 0.23.18",
+ "rustls-pki-types",
]
[[package]]
@@ -7831,7 +7966,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24"
dependencies = [
"gloo-timers",
- "send_wrapper 0.4.0",
+ "send_wrapper",
]
[[package]]
@@ -8110,7 +8245,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http 0.2.9",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"slab",
"tokio",
"tokio-util",
@@ -8129,7 +8264,7 @@ dependencies = [
"futures-core",
"futures-sink",
"http 1.1.0",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"slab",
"tokio",
"tokio-util",
@@ -8200,6 +8335,16 @@ dependencies = [
"serde",
]
+[[package]]
+name = "hashbrown"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
+dependencies = [
+ "foldhash",
+ "serde",
+]
+
[[package]]
name = "hashlink"
version = "0.8.4"
@@ -8250,6 +8395,9 @@ name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+dependencies = [
+ "serde",
+]
[[package]]
name = "hex-conservative"
@@ -8281,7 +8429,7 @@ dependencies = [
"async-trait",
"cfg-if",
"data-encoding",
- "enum-as-inner 0.6.0",
+ "enum-as-inner",
"futures-channel",
"futures-io",
"futures-util",
@@ -8289,6 +8437,7 @@ dependencies = [
"ipnet",
"once_cell",
"rand",
+ "socket2 0.5.7",
"thiserror",
"tinyvec",
"tokio",
@@ -8298,9 +8447,9 @@ dependencies = [
[[package]]
name = "hickory-resolver"
-version = "0.24.1"
+version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243"
+checksum = "0a2e2aba9c389ce5267d31cf1e4dace82390ae276b0b364ea55630b1fa1b44b4"
dependencies = [
"cfg-if",
"futures-util",
@@ -8623,17 +8772,6 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
-[[package]]
-name = "idna"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
-dependencies = [
- "matches",
- "unicode-bidi",
- "unicode-normalization",
-]
-
[[package]]
name = "idna"
version = "0.4.0"
@@ -8827,12 +8965,13 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.2.3"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177"
+checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
dependencies = [
"equivalent",
- "hashbrown 0.14.5",
+ "hashbrown 0.15.2",
+ "serde",
]
[[package]]
@@ -8907,7 +9046,7 @@ dependencies = [
"socket2 0.5.7",
"widestring",
"windows-sys 0.48.0",
- "winreg 0.50.0",
+ "winreg",
]
[[package]]
@@ -8946,7 +9085,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
"hermit-abi 0.3.9",
- "rustix 0.38.25",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
@@ -9332,6 +9471,16 @@ dependencies = [
"cpufeatures",
]
+[[package]]
+name = "keccak-asm"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6"
+dependencies = [
+ "digest 0.10.7",
+ "sha3-asm",
+]
+
[[package]]
name = "keccak-hash"
version = "0.11.0"
@@ -9625,9 +9774,31 @@ dependencies = [
"futures-timer",
"getrandom",
"instant",
- "libp2p-allow-block-list",
- "libp2p-connection-limits",
- "libp2p-core",
+ "libp2p-allow-block-list 0.2.0",
+ "libp2p-connection-limits 0.2.1",
+ "libp2p-core 0.40.1",
+ "libp2p-identity",
+ "libp2p-swarm 0.43.7",
+ "multiaddr 0.18.1",
+ "pin-project",
+ "rw-stream-sink",
+ "thiserror",
+]
+
+[[package]]
+name = "libp2p"
+version = "0.54.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbbe80f9c7e00526cd6b838075b9c171919404a4732cb2fa8ece0a093223bfc4"
+dependencies = [
+ "bytes",
+ "either",
+ "futures",
+ "futures-timer",
+ "getrandom",
+ "libp2p-allow-block-list 0.4.0",
+ "libp2p-connection-limits 0.4.0",
+ "libp2p-core 0.42.0",
"libp2p-dns",
"libp2p-identify",
"libp2p-identity",
@@ -9638,10 +9809,9 @@ dependencies = [
"libp2p-ping",
"libp2p-quic",
"libp2p-request-response",
- "libp2p-swarm",
+ "libp2p-swarm 0.45.1",
"libp2p-tcp",
"libp2p-upnp",
- "libp2p-wasm-ext",
"libp2p-websocket",
"libp2p-yamux",
"multiaddr 0.18.1",
@@ -9656,9 +9826,21 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55b46558c5c0bf99d3e2a1a38fd54ff5476ca66dd1737b12466a1824dd219311"
dependencies = [
- "libp2p-core",
+ "libp2p-core 0.40.1",
"libp2p-identity",
- "libp2p-swarm",
+ "libp2p-swarm 0.43.7",
+ "void",
+]
+
+[[package]]
+name = "libp2p-allow-block-list"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1027ccf8d70320ed77e984f273bc8ce952f623762cb9bf2d126df73caef8041"
+dependencies = [
+ "libp2p-core 0.42.0",
+ "libp2p-identity",
+ "libp2p-swarm 0.45.1",
"void",
]
@@ -9668,9 +9850,21 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f5107ad45cb20b2f6c3628c7b6014b996fcb13a88053f4569c872c6e30abf58"
dependencies = [
- "libp2p-core",
+ "libp2p-core 0.40.1",
"libp2p-identity",
- "libp2p-swarm",
+ "libp2p-swarm 0.43.7",
+ "void",
+]
+
+[[package]]
+name = "libp2p-connection-limits"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d003540ee8baef0d254f7b6bfd79bac3ddf774662ca0abf69186d517ef82ad8"
+dependencies = [
+ "libp2p-core 0.42.0",
+ "libp2p-identity",
+ "libp2p-swarm 0.45.1",
"void",
]
@@ -9702,42 +9896,70 @@ dependencies = [
"void",
]
+[[package]]
+name = "libp2p-core"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a61f26c83ed111104cd820fe9bc3aaabbac5f1652a1d213ed6e900b7918a1298"
+dependencies = [
+ "either",
+ "fnv",
+ "futures",
+ "futures-timer",
+ "libp2p-identity",
+ "multiaddr 0.18.1",
+ "multihash 0.19.1",
+ "multistream-select",
+ "once_cell",
+ "parking_lot 0.12.3",
+ "pin-project",
+ "quick-protobuf 0.8.1",
+ "rand",
+ "rw-stream-sink",
+ "smallvec",
+ "thiserror",
+ "tracing",
+ "unsigned-varint 0.8.0",
+ "void",
+ "web-time",
+]
+
[[package]]
name = "libp2p-dns"
-version = "0.40.1"
+version = "0.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6a18db73084b4da2871438f6239fef35190b05023de7656e877c18a00541a3b"
+checksum = "97f37f30d5c7275db282ecd86e54f29dd2176bd3ac656f06abf43bedb21eb8bd"
dependencies = [
"async-trait",
"futures",
- "libp2p-core",
+ "hickory-resolver",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "log",
"parking_lot 0.12.3",
"smallvec",
- "trust-dns-resolver",
+ "tracing",
]
[[package]]
name = "libp2p-identify"
-version = "0.43.1"
+version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45a96638a0a176bec0a4bcaebc1afa8cf909b114477209d7456ade52c61cd9cd"
+checksum = "1711b004a273be4f30202778856368683bd9a83c4c7dcc8f848847606831a4e3"
dependencies = [
- "asynchronous-codec",
+ "asynchronous-codec 0.7.0",
"either",
"futures",
"futures-bounded",
"futures-timer",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "libp2p-swarm",
- "log",
+ "libp2p-swarm 0.45.1",
"lru 0.12.3",
"quick-protobuf 0.8.1",
"quick-protobuf-codec",
"smallvec",
"thiserror",
+ "tracing",
"void",
]
@@ -9761,83 +9983,84 @@ dependencies = [
[[package]]
name = "libp2p-kad"
-version = "0.44.6"
+version = "0.46.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16ea178dabba6dde6ffc260a8e0452ccdc8f79becf544946692fff9d412fc29d"
+checksum = "ced237d0bd84bbebb7c2cad4c073160dacb4fe40534963c32ed6d4c6bb7702a3"
dependencies = [
"arrayvec 0.7.4",
- "asynchronous-codec",
+ "asynchronous-codec 0.7.0",
"bytes",
"either",
"fnv",
"futures",
+ "futures-bounded",
"futures-timer",
- "instant",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "libp2p-swarm",
- "log",
+ "libp2p-swarm 0.45.1",
"quick-protobuf 0.8.1",
"quick-protobuf-codec",
"rand",
"sha2 0.10.8",
"smallvec",
"thiserror",
+ "tracing",
"uint 0.9.5",
- "unsigned-varint 0.7.2",
"void",
+ "web-time",
]
[[package]]
name = "libp2p-mdns"
-version = "0.44.0"
+version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42a2567c305232f5ef54185e9604579a894fd0674819402bb0ac0246da82f52a"
+checksum = "14b8546b6644032565eb29046b42744aee1e9f261ed99671b2c93fb140dba417"
dependencies = [
"data-encoding",
"futures",
+ "hickory-proto",
"if-watch",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "libp2p-swarm",
- "log",
+ "libp2p-swarm 0.45.1",
"rand",
"smallvec",
"socket2 0.5.7",
"tokio",
- "trust-dns-proto 0.22.0",
+ "tracing",
"void",
]
[[package]]
name = "libp2p-metrics"
-version = "0.13.1"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "239ba7d28f8d0b5d77760dc6619c05c7e88e74ec8fbbe97f856f20a56745e620"
+checksum = "77ebafa94a717c8442d8db8d3ae5d1c6a15e30f2d347e0cd31d057ca72e42566"
dependencies = [
- "instant",
- "libp2p-core",
+ "futures",
+ "libp2p-core 0.42.0",
"libp2p-identify",
"libp2p-identity",
"libp2p-kad",
"libp2p-ping",
- "libp2p-swarm",
- "once_cell",
+ "libp2p-swarm 0.45.1",
+ "pin-project",
"prometheus-client",
+ "web-time",
]
[[package]]
name = "libp2p-noise"
-version = "0.43.2"
+version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2eeec39ad3ad0677551907dd304b2f13f17208ccebe333bef194076cd2e8921"
+checksum = "36b137cb1ae86ee39f8e5d6245a296518912014eaa87427d24e6ff58cfc1b28c"
dependencies = [
+ "asynchronous-codec 0.7.0",
"bytes",
"curve25519-dalek 4.1.3",
"futures",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "log",
"multiaddr 0.18.1",
"multihash 0.19.1",
"once_cell",
@@ -9847,68 +10070,71 @@ dependencies = [
"snow",
"static_assertions",
"thiserror",
+ "tracing",
"x25519-dalek",
"zeroize",
]
[[package]]
name = "libp2p-ping"
-version = "0.43.1"
+version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e702d75cd0827dfa15f8fd92d15b9932abe38d10d21f47c50438c71dd1b5dae3"
+checksum = "005a34420359223b974ee344457095f027e51346e992d1e0dcd35173f4cdd422"
dependencies = [
"either",
"futures",
"futures-timer",
- "instant",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "libp2p-swarm",
- "log",
+ "libp2p-swarm 0.45.1",
"rand",
+ "tracing",
"void",
+ "web-time",
]
[[package]]
name = "libp2p-quic"
-version = "0.9.3"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "130d451d83f21b81eb7b35b360bc7972aeafb15177784adc56528db082e6b927"
+checksum = "46352ac5cd040c70e88e7ff8257a2ae2f891a4076abad2c439584a31c15fd24e"
dependencies = [
"bytes",
"futures",
"futures-timer",
"if-watch",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
"libp2p-tls",
- "log",
"parking_lot 0.12.3",
- "quinn 0.10.2",
+ "quinn",
"rand",
- "ring 0.16.20",
- "rustls 0.21.7",
+ "ring 0.17.8",
+ "rustls 0.23.18",
"socket2 0.5.7",
"thiserror",
"tokio",
+ "tracing",
]
[[package]]
name = "libp2p-request-response"
-version = "0.25.3"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8e3b4d67870478db72bac87bfc260ee6641d0734e0e3e275798f089c3fecfd4"
+checksum = "1356c9e376a94a75ae830c42cdaea3d4fe1290ba409a22c809033d1b7dcab0a6"
dependencies = [
"async-trait",
"futures",
- "instant",
- "libp2p-core",
+ "futures-bounded",
+ "futures-timer",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "libp2p-swarm",
- "log",
+ "libp2p-swarm 0.45.1",
"rand",
"smallvec",
+ "tracing",
"void",
+ "web-time",
]
[[package]]
@@ -9922,26 +10148,47 @@ dependencies = [
"futures",
"futures-timer",
"instant",
- "libp2p-core",
+ "libp2p-core 0.40.1",
"libp2p-identity",
- "libp2p-swarm-derive",
"log",
"multistream-select",
"once_cell",
"rand",
"smallvec",
+ "void",
+]
+
+[[package]]
+name = "libp2p-swarm"
+version = "0.45.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7dd6741793d2c1fb2088f67f82cf07261f25272ebe3c0b0c311e0c6b50e851a"
+dependencies = [
+ "either",
+ "fnv",
+ "futures",
+ "futures-timer",
+ "libp2p-core 0.42.0",
+ "libp2p-identity",
+ "libp2p-swarm-derive",
+ "lru 0.12.3",
+ "multistream-select",
+ "once_cell",
+ "rand",
+ "smallvec",
"tokio",
+ "tracing",
"void",
+ "web-time",
]
[[package]]
name = "libp2p-swarm-derive"
-version = "0.33.0"
+version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4d5ec2a3df00c7836d7696c136274c9c59705bac69133253696a6c932cd1d74"
+checksum = "206e0aa0ebe004d778d79fb0966aa0de996c19894e2c0605ba2f8524dd4443d8"
dependencies = [
- "heck 0.4.1",
- "proc-macro-warning 0.4.2",
+ "heck 0.5.0",
"proc-macro2 1.0.86",
"quote 1.0.37",
"syn 2.0.87",
@@ -9949,102 +10196,90 @@ dependencies = [
[[package]]
name = "libp2p-tcp"
-version = "0.40.1"
+version = "0.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b558dd40d1bcd1aaaed9de898e9ec6a436019ecc2420dd0016e712fbb61c5508"
+checksum = "ad964f312c59dcfcac840acd8c555de8403e295d39edf96f5240048b5fcaa314"
dependencies = [
"futures",
"futures-timer",
"if-watch",
"libc",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "log",
"socket2 0.5.7",
"tokio",
+ "tracing",
]
[[package]]
name = "libp2p-tls"
-version = "0.2.1"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8218d1d5482b122ccae396bbf38abdcb283ecc96fa54760e1dfd251f0546ac61"
+checksum = "47b23dddc2b9c355f73c1e36eb0c3ae86f7dc964a3715f0731cfad352db4d847"
dependencies = [
"futures",
"futures-rustls",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "rcgen",
- "ring 0.16.20",
- "rustls 0.21.7",
+ "rcgen 0.11.3",
+ "ring 0.17.8",
+ "rustls 0.23.18",
"rustls-webpki 0.101.4",
"thiserror",
- "x509-parser 0.15.1",
+ "x509-parser",
"yasna",
]
[[package]]
name = "libp2p-upnp"
-version = "0.1.1"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82775a47b34f10f787ad3e2a22e2c1541e6ebef4fe9f28f3ac553921554c94c1"
+checksum = "01bf2d1b772bd3abca049214a3304615e6a36fa6ffc742bdd1ba774486200b8f"
dependencies = [
"futures",
"futures-timer",
"igd-next",
- "libp2p-core",
- "libp2p-swarm",
- "log",
+ "libp2p-core 0.42.0",
+ "libp2p-swarm 0.45.1",
"tokio",
+ "tracing",
"void",
]
-[[package]]
-name = "libp2p-wasm-ext"
-version = "0.40.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e5d8e3a9e07da0ef5b55a9f26c009c8fb3c725d492d8bb4b431715786eea79c"
-dependencies = [
- "futures",
- "js-sys",
- "libp2p-core",
- "send_wrapper 0.6.0",
- "wasm-bindgen",
- "wasm-bindgen-futures",
-]
-
[[package]]
name = "libp2p-websocket"
-version = "0.42.2"
+version = "0.44.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "004ee9c4a4631435169aee6aad2f62e3984dc031c43b6d29731e8e82a016c538"
+checksum = "888b2ff2e5d8dcef97283daab35ad1043d18952b65e05279eecbe02af4c6e347"
dependencies = [
"either",
"futures",
"futures-rustls",
- "libp2p-core",
+ "libp2p-core 0.42.0",
"libp2p-identity",
- "log",
"parking_lot 0.12.3",
"pin-project-lite",
"rw-stream-sink",
"soketto 0.8.0",
"thiserror",
+ "tracing",
"url",
"webpki-roots 0.25.2",
]
[[package]]
name = "libp2p-yamux"
-version = "0.44.1"
+version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8eedcb62824c4300efb9cfd4e2a6edaf3ca097b9e68b36dabe45a44469fd6a85"
+checksum = "788b61c80789dba9760d8c669a5bedb642c8267555c803fabd8396e4ca5c5882"
dependencies = [
+ "either",
"futures",
- "libp2p-core",
- "log",
+ "libp2p-core 0.42.0",
"thiserror",
- "yamux",
+ "tracing",
+ "yamux 0.12.1",
+ "yamux 0.13.3",
]
[[package]]
@@ -10169,9 +10404,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
name = "linux-raw-sys"
-version = "0.4.11"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
[[package]]
name = "lioness"
@@ -10205,9 +10440,9 @@ dependencies = [
[[package]]
name = "litep2p"
-version = "0.8.1"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b67484b8ac41e1cfdf012f65fa81e88c2ef5f8a7d6dec0e2678c2d06dc04530"
+checksum = "2b0fef34af8847e816003bf7fdeac5ea50b9a7a88441ac927a6166b5e812ab79"
dependencies = [
"async-trait",
"bs58",
@@ -10218,7 +10453,7 @@ dependencies = [
"futures-timer",
"hex-literal",
"hickory-resolver",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"libc",
"mockall 0.13.0",
"multiaddr 0.17.1",
@@ -10230,7 +10465,7 @@ dependencies = [
"prost 0.12.6",
"prost-build",
"rand",
- "rcgen",
+ "rcgen 0.10.0",
"ring 0.16.20",
"rustls 0.20.9",
"serde",
@@ -10250,7 +10485,7 @@ dependencies = [
"unsigned-varint 0.8.0",
"url",
"x25519-dalek",
- "x509-parser 0.16.0",
+ "x509-parser",
"yasna",
"zeroize",
]
@@ -10443,12 +10678,6 @@ dependencies = [
"regex-automata 0.1.10",
]
-[[package]]
-name = "matches"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
-
[[package]]
name = "matrixmultiply"
version = "0.3.7"
@@ -10521,9 +10750,9 @@ dependencies = [
[[package]]
name = "merkleized-metadata"
-version = "0.1.2"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "943f6d92804ed0100803d51fa9b21fd9432b5d122ba4c713dc26fe6d2f619cf6"
+checksum = "38c592efaf1b3250df14c8f3c2d952233f0302bb81d3586db2f303666c1cd607"
dependencies = [
"array-bytes",
"blake3",
@@ -11047,14 +11276,13 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.26.2"
+version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
dependencies = [
"bitflags 1.3.2",
"cfg-if",
"libc",
- "static_assertions",
]
[[package]]
@@ -11070,13 +11298,13 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.28.0"
+version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4"
+checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
"bitflags 2.6.0",
"cfg-if",
- "cfg_aliases",
+ "cfg_aliases 0.2.1",
"libc",
]
@@ -11451,22 +11679,13 @@ dependencies = [
"memchr",
]
-[[package]]
-name = "oid-registry"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff"
-dependencies = [
- "asn1-rs 0.5.2",
-]
-
[[package]]
name = "oid-registry"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c958dd45046245b9c3c2547369bb634eb461670b2e7e0de552905801a648d1d"
dependencies = [
- "asn1-rs 0.6.1",
+ "asn1-rs",
]
[[package]]
@@ -11567,7 +11786,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7b1d40dd8f367db3c65bec8d3dd47d4a604ee8874480738f93191bddab4e0e0"
dependencies = [
"expander",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"itertools 0.11.0",
"petgraph",
"proc-macro-crate 3.1.0",
@@ -14611,7 +14830,6 @@ version = "0.1.0"
dependencies = [
"array-bytes",
"assert_matches",
- "bitflags 1.3.2",
"derive_more 0.99.17",
"environmental",
"ethereum-types 0.15.1",
@@ -14621,11 +14839,8 @@ dependencies = [
"hex",
"hex-literal",
"impl-trait-for-tuples",
- "jsonrpsee",
"log",
- "pallet-assets 29.1.0",
"pallet-balances 28.0.0",
- "pallet-message-queue 31.0.0",
"pallet-proxy 28.0.0",
"pallet-revive-fixtures 0.1.0",
"pallet-revive-proc-macro 0.1.0",
@@ -14635,7 +14850,7 @@ dependencies = [
"pallet-utility 28.0.0",
"parity-scale-codec",
"paste",
- "polkavm 0.13.0",
+ "polkavm 0.18.0",
"pretty_assertions",
"rlp 0.6.1",
"scale-info",
@@ -14650,7 +14865,6 @@ dependencies = [
"sp-runtime 31.0.1",
"sp-std 14.0.0",
"sp-tracing 16.0.0",
- "sp-weights 27.0.0",
"staging-xcm 7.0.0",
"staging-xcm-builder 7.0.0",
"subxt-signer",
@@ -14697,7 +14911,6 @@ dependencies = [
"ethabi",
"futures",
"hex",
- "hex-literal",
"jsonrpsee",
"log",
"pallet-revive 0.1.0",
@@ -14708,12 +14921,8 @@ dependencies = [
"sc-rpc",
"sc-rpc-api",
"sc-service",
- "scale-info",
- "secp256k1 0.28.2",
- "serde_json",
"sp-core 28.0.0",
"sp-crypto-hashing 0.1.0",
- "sp-runtime 31.0.1",
"sp-weights 27.0.0",
"static_init",
"substrate-cli-test-utils",
@@ -14729,14 +14938,9 @@ name = "pallet-revive-fixtures"
version = "0.1.0"
dependencies = [
"anyhow",
- "frame-system 28.0.0",
- "log",
- "parity-wasm",
- "polkavm-linker 0.14.0",
+ "polkavm-linker 0.18.0",
"sp-core 28.0.0",
"sp-io 30.0.0",
- "sp-runtime 31.0.1",
- "tempfile",
"toml 0.8.12",
]
@@ -14765,13 +14969,10 @@ dependencies = [
"pallet-assets 29.1.0",
"pallet-balances 28.0.0",
"pallet-message-queue 31.0.0",
- "pallet-proxy 28.0.0",
"pallet-revive 0.1.0",
"pallet-revive-fixtures 0.1.0",
- "pallet-revive-proc-macro 0.1.0",
"pallet-revive-uapi 0.1.0",
"pallet-timestamp 27.0.0",
- "pallet-utility 28.0.0",
"pallet-xcm 7.0.0",
"parity-scale-codec",
"polkadot-parachain-primitives 6.0.0",
@@ -14779,10 +14980,8 @@ dependencies = [
"polkadot-runtime-parachains 7.0.0",
"pretty_assertions",
"scale-info",
- "sp-api 26.0.0",
"sp-core 28.0.0",
"sp-io 30.0.0",
- "sp-keystore 0.34.0",
"sp-runtime 31.0.1",
"sp-tracing 16.0.0",
"staging-xcm 7.0.0",
@@ -14851,9 +15050,10 @@ name = "pallet-revive-uapi"
version = "0.1.0"
dependencies = [
"bitflags 1.3.2",
+ "pallet-revive-proc-macro 0.1.0",
"parity-scale-codec",
"paste",
- "polkavm-derive 0.14.0",
+ "polkavm-derive 0.18.0",
"scale-info",
]
@@ -15967,6 +16167,7 @@ dependencies = [
"bp-messages 0.7.0",
"bp-runtime 0.7.0",
"bp-xcm-bridge-hub 0.2.0",
+ "bp-xcm-bridge-hub-router 0.6.0",
"frame-benchmarking 28.0.0",
"frame-support 28.0.0",
"frame-system 28.0.0",
@@ -16646,6 +16847,7 @@ dependencies = [
"sp-runtime 31.0.1",
"staging-xcm 7.0.0",
"staging-xcm-executor 7.0.0",
+ "westend-runtime",
"westend-runtime-constants 7.0.0",
"westend-system-emulated-network",
]
@@ -16775,7 +16977,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
dependencies = [
"fixedbitset",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
]
[[package]]
@@ -16866,7 +17068,7 @@ version = "6.0.0"
dependencies = [
"assert_cmd",
"color-eyre",
- "nix 0.28.0",
+ "nix 0.29.0",
"polkadot-cli",
"polkadot-core-primitives 7.0.0",
"polkadot-node-core-pvf",
@@ -17104,7 +17306,7 @@ dependencies = [
"fatality",
"futures",
"futures-timer",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"parity-scale-codec",
"polkadot-erasure-coding",
"polkadot-node-network-protocol",
@@ -17615,7 +17817,7 @@ dependencies = [
"futures",
"landlock",
"libc",
- "nix 0.28.0",
+ "nix 0.29.0",
"parity-scale-codec",
"polkadot-parachain-primitives 6.0.0",
"polkadot-primitives 7.0.0",
@@ -17640,7 +17842,7 @@ dependencies = [
"cfg-if",
"cpu-time",
"libc",
- "nix 0.28.0",
+ "nix 0.29.0",
"parity-scale-codec",
"polkadot-node-core-pvf-common",
"polkadot-node-primitives",
@@ -17658,7 +17860,7 @@ dependencies = [
"cfg-if",
"criterion",
"libc",
- "nix 0.28.0",
+ "nix 0.29.0",
"parity-scale-codec",
"polkadot-node-core-pvf-common",
"polkadot-node-primitives",
@@ -17900,6 +18102,7 @@ dependencies = [
"cumulus-primitives-aura 0.7.0",
"cumulus-primitives-core 0.7.0",
"cumulus-relay-chain-interface",
+ "cumulus-test-runtime",
"docify",
"frame-benchmarking 28.0.0",
"frame-benchmarking-cli",
@@ -17910,7 +18113,7 @@ dependencies = [
"futures-timer",
"jsonrpsee",
"log",
- "nix 0.28.0",
+ "nix 0.29.0",
"pallet-transaction-payment 28.0.0",
"pallet-transaction-payment-rpc",
"pallet-transaction-payment-rpc-runtime-api 28.0.0",
@@ -17928,22 +18131,27 @@ dependencies = [
"sc-executor 0.32.0",
"sc-network",
"sc-rpc",
+ "sc-runtime-utilities",
"sc-service",
"sc-sysinfo",
"sc-telemetry",
"sc-tracing",
"sc-transaction-pool",
+ "scale-info",
"serde",
"serde_json",
"sp-api 26.0.0",
"sp-block-builder 26.0.0",
+ "sp-consensus",
"sp-consensus-aura 0.32.0",
"sp-core 28.0.0",
+ "sp-crypto-hashing 0.1.0",
"sp-genesis-builder 0.8.0",
"sp-inherents 26.0.0",
"sp-keystore 0.34.0",
"sp-runtime 31.0.1",
"sp-session 27.0.0",
+ "sp-storage 19.0.0",
"sp-timestamp 26.0.0",
"sp-transaction-pool 26.0.0",
"sp-version 29.0.0",
@@ -17951,6 +18159,7 @@ dependencies = [
"substrate-frame-rpc-system",
"substrate-prometheus-endpoint",
"substrate-state-trie-migration-rpc",
+ "subxt-metadata",
"tokio",
"wait-timeout",
]
@@ -18559,7 +18768,6 @@ dependencies = [
"pallet-remark 28.0.0",
"pallet-revive 0.1.0",
"pallet-revive-eth-rpc",
- "pallet-revive-fixtures 0.1.0",
"pallet-revive-mock-network 0.1.0",
"pallet-revive-proc-macro 0.1.0",
"pallet-revive-uapi 0.1.0",
@@ -18689,6 +18897,7 @@ dependencies = [
"sc-rpc-api",
"sc-rpc-server",
"sc-rpc-spec-v2",
+ "sc-runtime-utilities",
"sc-service",
"sc-state-db",
"sc-statement-store",
@@ -19034,6 +19243,7 @@ version = "0.0.1"
dependencies = [
"assert_cmd",
"chain-spec-guide-runtime",
+ "cmd_lib",
"cumulus-client-service",
"cumulus-pallet-aura-ext 0.7.0",
"cumulus-pallet-parachain-system 0.7.0",
@@ -19351,7 +19561,7 @@ dependencies = [
"fatality",
"futures",
"futures-timer",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"parity-scale-codec",
"polkadot-node-network-protocol",
"polkadot-node-primitives",
@@ -19690,15 +19900,15 @@ dependencies = [
[[package]]
name = "polkavm"
-version = "0.13.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57e79a14b15ed38cb5b9a1e38d02e933f19e3d180ae5b325fed606c5e5b9177e"
+checksum = "dd044ab1d3b11567ab6b98ca71259a992b4034220d5972988a0e96518e5d343d"
dependencies = [
"libc",
"log",
- "polkavm-assembler 0.13.0",
- "polkavm-common 0.13.0",
- "polkavm-linux-raw 0.13.0",
+ "polkavm-assembler 0.18.0",
+ "polkavm-common 0.18.0",
+ "polkavm-linux-raw 0.18.0",
]
[[package]]
@@ -19721,9 +19931,9 @@ dependencies = [
[[package]]
name = "polkavm-assembler"
-version = "0.13.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e8da55465000feb0a61bbf556ed03024db58f3420eca37721fc726b3b2136bf"
+checksum = "eaad38dc420bfed79e6f731471c973ce5ff5e47ab403e63cf40358fef8a6368f"
dependencies = [
"log",
]
@@ -19755,20 +19965,14 @@ dependencies = [
[[package]]
name = "polkavm-common"
-version = "0.13.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "084b4339aae7dfdaaa5aa7d634110afd95970e0737b6fb2a0cb10db8b56b753c"
+checksum = "31ff33982a807d8567645d4784b9b5d7ab87bcb494f534a57cadd9012688e102"
dependencies = [
"log",
- "polkavm-assembler 0.13.0",
+ "polkavm-assembler 0.18.0",
]
-[[package]]
-name = "polkavm-common"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "711952a783e9c5ad407cdacb1ed147f36d37c5d43417c1091d86456d2999417b"
-
[[package]]
name = "polkavm-derive"
version = "0.8.0"
@@ -19798,11 +20002,11 @@ dependencies = [
[[package]]
name = "polkavm-derive"
-version = "0.14.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4832a0aebf6cefc988bb7b2d74ea8c86c983164672e2fc96300f356a1babfc1"
+checksum = "c2eb703f3b6404c13228402e98a5eae063fd16b8f58afe334073ec105ee4117e"
dependencies = [
- "polkavm-derive-impl-macro 0.14.0",
+ "polkavm-derive-impl-macro 0.18.0",
]
[[package]]
@@ -19843,11 +20047,11 @@ dependencies = [
[[package]]
name = "polkavm-derive-impl"
-version = "0.14.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e339fc7c11310fe5adf711d9342278ac44a75c9784947937cce12bd4f30842f2"
+checksum = "12d2840cc62a0550156b1676fed8392271ddf2fab4a00661db56231424674624"
dependencies = [
- "polkavm-common 0.14.0",
+ "polkavm-common 0.18.0",
"proc-macro2 1.0.86",
"quote 1.0.37",
"syn 2.0.87",
@@ -19885,11 +20089,11 @@ dependencies = [
[[package]]
name = "polkavm-derive-impl-macro"
-version = "0.14.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b569754b15060d03000c09e3bf11509d527f60b75d79b4c30c3625b5071d9702"
+checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b"
dependencies = [
- "polkavm-derive-impl 0.14.0",
+ "polkavm-derive-impl 0.18.0",
"syn 2.0.87",
]
@@ -19925,15 +20129,16 @@ dependencies = [
[[package]]
name = "polkavm-linker"
-version = "0.14.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0959ac3b0f4fd5caf5c245c637705f19493efe83dba31a83bbba928b93b0116a"
+checksum = "e9bfe793b094d9ea5c99b7c43ba46e277b0f8f48f4bbfdbabf8d3ebf701a4bd3"
dependencies = [
+ "dirs",
"gimli 0.31.1",
"hashbrown 0.14.5",
"log",
"object 0.36.1",
- "polkavm-common 0.14.0",
+ "polkavm-common 0.18.0",
"regalloc2 0.9.3",
"rustc-demangle",
]
@@ -19952,9 +20157,9 @@ checksum = "26e45fa59c7e1bb12ef5289080601e9ec9b31435f6e32800a5c90c132453d126"
[[package]]
name = "polkavm-linux-raw"
-version = "0.13.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "686c4dd9c9c16cc22565b51bdbb269792318d0fd2e6b966b5f6c788534cad0e9"
+checksum = "23eff02c070c70f31878a3d915e88a914ecf3e153741e2fb572dde28cce20fde"
[[package]]
name = "polling"
@@ -19981,7 +20186,7 @@ dependencies = [
"cfg-if",
"concurrent-queue",
"pin-project-lite",
- "rustix 0.38.25",
+ "rustix 0.38.21",
"tracing",
"windows-sys 0.52.0",
]
@@ -20041,7 +20246,7 @@ dependencies = [
"findshlibs",
"libc",
"log",
- "nix 0.26.2",
+ "nix 0.26.4",
"once_cell",
"parking_lot 0.12.3",
"smallvec",
@@ -20248,17 +20453,6 @@ version = "0.5.20+deprecated"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
-[[package]]
-name = "proc-macro-warning"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e"
-dependencies = [
- "proc-macro2 1.0.86",
- "quote 1.0.37",
- "syn 2.0.87",
-]
-
[[package]]
name = "proc-macro-warning"
version = "1.0.0"
@@ -20300,7 +20494,7 @@ dependencies = [
"hex",
"lazy_static",
"procfs-core",
- "rustix 0.38.25",
+ "rustix 0.38.21",
]
[[package]]
@@ -20330,9 +20524,9 @@ dependencies = [
[[package]]
name = "prometheus-client"
-version = "0.21.2"
+version = "0.22.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2"
+checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca"
dependencies = [
"dtoa",
"itoa",
@@ -20503,7 +20697,7 @@ dependencies = [
"log",
"names",
"prost 0.11.9",
- "reqwest 0.11.20",
+ "reqwest 0.11.27",
"thiserror",
"url",
"winapi",
@@ -20563,15 +20757,15 @@ dependencies = [
[[package]]
name = "quick-protobuf-codec"
-version = "0.2.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98"
+checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474"
dependencies = [
- "asynchronous-codec",
+ "asynchronous-codec 0.7.0",
"bytes",
"quick-protobuf 0.8.1",
"thiserror",
- "unsigned-varint 0.7.2",
+ "unsigned-varint 0.8.0",
]
[[package]]
@@ -20596,24 +20790,6 @@ dependencies = [
"rand",
]
-[[package]]
-name = "quinn"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75"
-dependencies = [
- "bytes",
- "futures-io",
- "pin-project-lite",
- "quinn-proto 0.10.6",
- "quinn-udp 0.4.1",
- "rustc-hash 1.1.0",
- "rustls 0.21.7",
- "thiserror",
- "tokio",
- "tracing",
-]
-
[[package]]
name = "quinn"
version = "0.11.5"
@@ -20621,9 +20797,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684"
dependencies = [
"bytes",
+ "futures-io",
"pin-project-lite",
- "quinn-proto 0.11.8",
- "quinn-udp 0.5.4",
+ "quinn-proto",
+ "quinn-udp",
"rustc-hash 2.0.0",
"rustls 0.23.18",
"socket2 0.5.7",
@@ -20632,23 +20809,6 @@ dependencies = [
"tracing",
]
-[[package]]
-name = "quinn-proto"
-version = "0.10.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a"
-dependencies = [
- "bytes",
- "rand",
- "ring 0.16.20",
- "rustc-hash 1.1.0",
- "rustls 0.21.7",
- "slab",
- "thiserror",
- "tinyvec",
- "tracing",
-]
-
[[package]]
name = "quinn-proto"
version = "0.11.8"
@@ -20657,7 +20817,7 @@ checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6"
dependencies = [
"bytes",
"rand",
- "ring 0.17.7",
+ "ring 0.17.8",
"rustc-hash 2.0.0",
"rustls 0.23.18",
"slab",
@@ -20666,19 +20826,6 @@ dependencies = [
"tracing",
]
-[[package]]
-name = "quinn-udp"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7"
-dependencies = [
- "bytes",
- "libc",
- "socket2 0.5.7",
- "tracing",
- "windows-sys 0.48.0",
-]
-
[[package]]
name = "quinn-udp"
version = "0.5.4"
@@ -20725,6 +20872,7 @@ dependencies = [
"libc",
"rand_chacha",
"rand_core 0.6.4",
+ "serde",
]
[[package]]
@@ -20847,6 +20995,18 @@ dependencies = [
"yasna",
]
+[[package]]
+name = "rcgen"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6"
+dependencies = [
+ "pem 3.0.4",
+ "ring 0.16.20",
+ "time",
+ "yasna",
+]
+
[[package]]
name = "redox_syscall"
version = "0.2.16"
@@ -21081,9 +21241,9 @@ dependencies = [
[[package]]
name = "reqwest"
-version = "0.11.20"
+version = "0.11.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
+checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62"
dependencies = [
"base64 0.21.7",
"bytes",
@@ -21109,6 +21269,8 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
+ "sync_wrapper 0.1.2",
+ "system-configuration",
"tokio",
"tokio-native-tls",
"tokio-rustls 0.24.1",
@@ -21118,14 +21280,14 @@ dependencies = [
"wasm-bindgen-futures",
"web-sys",
"webpki-roots 0.25.2",
- "winreg 0.50.0",
+ "winreg",
]
[[package]]
name = "reqwest"
-version = "0.12.5"
+version = "0.12.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37"
+checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -21145,14 +21307,14 @@ dependencies = [
"once_cell",
"percent-encoding",
"pin-project-lite",
- "quinn 0.11.5",
+ "quinn",
"rustls 0.23.18",
"rustls-pemfile 2.0.0",
"rustls-pki-types",
"serde",
"serde_json",
"serde_urlencoded",
- "sync_wrapper",
+ "sync_wrapper 1.0.1",
"tokio",
"tokio-rustls 0.26.0",
"tower-service",
@@ -21161,7 +21323,7 @@ dependencies = [
"wasm-bindgen-futures",
"web-sys",
"webpki-roots 0.26.3",
- "winreg 0.52.0",
+ "windows-registry",
]
[[package]]
@@ -21218,16 +21380,17 @@ dependencies = [
[[package]]
name = "ring"
-version = "0.17.7"
+version = "0.17.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
+checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
dependencies = [
"cc",
+ "cfg-if",
"getrandom",
"libc",
"spin 0.9.8",
"untrusted 0.9.0",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -21700,14 +21863,14 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.25"
+version = "0.38.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
dependencies = [
"bitflags 2.6.0",
"errno",
"libc",
- "linux-raw-sys 0.4.11",
+ "linux-raw-sys 0.4.10",
"windows-sys 0.48.0",
]
@@ -21741,7 +21904,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432"
dependencies = [
"log",
- "ring 0.17.7",
+ "ring 0.17.8",
"rustls-pki-types",
"rustls-webpki 0.102.8",
"subtle 2.5.0",
@@ -21756,7 +21919,7 @@ checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f"
dependencies = [
"log",
"once_cell",
- "ring 0.17.7",
+ "ring 0.17.8",
"rustls-pki-types",
"rustls-webpki 0.102.8",
"subtle 2.5.0",
@@ -21869,7 +22032,7 @@ version = "0.102.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
dependencies = [
- "ring 0.17.7",
+ "ring 0.17.8",
"rustls-pki-types",
"untrusted 0.9.0",
]
@@ -22680,7 +22843,7 @@ dependencies = [
name = "sc-executor-common"
version = "0.29.0"
dependencies = [
- "polkavm 0.9.3",
+ "polkavm 0.18.0",
"sc-allocator 23.0.0",
"sp-maybe-compressed-blob 11.0.0",
"sp-wasm-interface 20.0.0",
@@ -22721,7 +22884,7 @@ name = "sc-executor-polkavm"
version = "0.29.0"
dependencies = [
"log",
- "polkavm 0.9.3",
+ "polkavm 0.18.0",
"sc-executor-common 0.29.0",
"sp-wasm-interface 20.0.0",
]
@@ -22878,7 +23041,7 @@ dependencies = [
"assert_matches",
"async-channel 1.9.0",
"async-trait",
- "asynchronous-codec",
+ "asynchronous-codec 0.6.2",
"bytes",
"cid 0.9.0",
"criterion",
@@ -22887,7 +23050,7 @@ dependencies = [
"futures",
"futures-timer",
"ip_network",
- "libp2p",
+ "libp2p 0.54.1",
"linked_hash_set",
"litep2p",
"log",
@@ -23063,7 +23226,7 @@ dependencies = [
"async-trait",
"futures",
"futures-timer",
- "libp2p",
+ "libp2p 0.54.1",
"log",
"parking_lot 0.12.3",
"rand",
@@ -23314,6 +23477,25 @@ dependencies = [
"substrate-wasm-builder 17.0.0",
]
+[[package]]
+name = "sc-runtime-utilities"
+version = "0.1.0"
+dependencies = [
+ "cumulus-primitives-proof-size-hostfunction 0.2.0",
+ "cumulus-test-runtime",
+ "parity-scale-codec",
+ "sc-executor 0.32.0",
+ "sc-executor-common 0.29.0",
+ "sp-core 28.0.0",
+ "sp-crypto-hashing 0.1.0",
+ "sp-io 30.0.0",
+ "sp-state-machine 0.35.0",
+ "sp-version 29.0.0",
+ "sp-wasm-interface 20.0.0",
+ "subxt",
+ "thiserror",
+]
+
[[package]]
name = "sc-service"
version = "0.35.0"
@@ -23502,7 +23684,7 @@ version = "15.0.0"
dependencies = [
"chrono",
"futures",
- "libp2p",
+ "libp2p 0.54.1",
"log",
"parking_lot 0.12.3",
"pin-project",
@@ -23564,7 +23746,7 @@ dependencies = [
"criterion",
"futures",
"futures-timer",
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"itertools 0.11.0",
"linked-hash-map",
"log",
@@ -23704,9 +23886,9 @@ dependencies = [
[[package]]
name = "scale-info"
-version = "2.11.5"
+version = "2.11.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1aa7ffc1c0ef49b0452c6e2986abf2b07743320641ffd5fc63d552458e3b779b"
+checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b"
dependencies = [
"bitvec",
"cfg-if",
@@ -23718,9 +23900,9 @@ dependencies = [
[[package]]
name = "scale-info-derive"
-version = "2.11.5"
+version = "2.11.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46385cc24172cf615450267463f937c10072516359b3ff1cb24228a4a08bf951"
+checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf"
dependencies = [
"proc-macro-crate 3.1.0",
"proc-macro2 1.0.86",
@@ -24052,12 +24234,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0"
-[[package]]
-name = "send_wrapper"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
-
[[package]]
name = "separator"
version = "0.4.1"
@@ -24138,7 +24314,7 @@ version = "1.0.132"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03"
dependencies = [
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"itoa",
"memchr",
"ryu",
@@ -24172,7 +24348,7 @@ version = "0.9.34+deprecated"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
dependencies = [
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"itoa",
"ryu",
"serde",
@@ -24259,6 +24435,16 @@ dependencies = [
"keccak",
]
+[[package]]
+name = "sha3-asm"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46"
+dependencies = [
+ "cc",
+ "cfg-if",
+]
+
[[package]]
name = "sharded-slab"
version = "0.1.4"
@@ -24651,7 +24837,7 @@ dependencies = [
"chacha20poly1305",
"curve25519-dalek 4.1.3",
"rand_core 0.6.4",
- "ring 0.17.7",
+ "ring 0.17.8",
"rustc_version 0.4.0",
"sha2 0.10.8",
"subtle 2.5.0",
@@ -24951,8 +25137,7 @@ dependencies = [
name = "snowbridge-pallet-inbound-queue"
version = "0.2.0"
dependencies = [
- "alloy-primitives",
- "alloy-sol-types",
+ "alloy-core",
"frame-benchmarking 28.0.0",
"frame-support 28.0.0",
"frame-system 28.0.0",
@@ -24982,8 +25167,8 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2e6a9d00e60e3744e6b6f0c21fea6694b9c6401ac40e41340a96e561dcf1935"
dependencies = [
- "alloy-primitives",
- "alloy-sol-types",
+ "alloy-primitives 0.4.2",
+ "alloy-sol-types 0.4.2",
"frame-benchmarking 38.0.0",
"frame-support 38.0.0",
"frame-system 38.0.0",
@@ -25537,6 +25722,7 @@ dependencies = [
"sp-api 26.0.0",
"sp-consensus",
"sp-core 28.0.0",
+ "sp-metadata-ir 0.6.0",
"sp-runtime 31.0.1",
"sp-state-machine 0.35.0",
"sp-tracing 16.0.0",
@@ -26223,7 +26409,7 @@ dependencies = [
[[package]]
name = "sp-crypto-ec-utils"
version = "0.4.1"
-source = "git+https://github.com/paritytech/polkadot-sdk#838a534da874cf6071fba1df07643c6c5b033ae0"
+source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f"
dependencies = [
"ark-bls12-377",
"ark-bls12-377-ext",
@@ -26482,7 +26668,7 @@ dependencies = [
"libsecp256k1",
"log",
"parity-scale-codec",
- "polkavm-derive 0.9.1",
+ "polkavm-derive 0.18.0",
"rustversion",
"secp256k1 0.28.2",
"sp-core 28.0.0",
@@ -26966,7 +27152,7 @@ dependencies = [
"bytes",
"impl-trait-for-tuples",
"parity-scale-codec",
- "polkavm-derive 0.9.1",
+ "polkavm-derive 0.18.0",
"primitive-types 0.13.1",
"rustversion",
"sp-core 28.0.0",
@@ -27046,7 +27232,7 @@ dependencies = [
[[package]]
name = "sp-runtime-interface-proc-macro"
version = "11.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk#838a534da874cf6071fba1df07643c6c5b033ae0"
+source = "git+https://github.com/paritytech/polkadot-sdk#82912acb33a9030c0ef3bf590a34fca09b72dc5f"
dependencies = [
"Inflector",
"proc-macro-crate 1.3.1",
@@ -27671,7 +27857,7 @@ name = "sp-version-proc-macro"
version = "13.0.0"
dependencies = [
"parity-scale-codec",
- "proc-macro-warning 1.0.0",
+ "proc-macro-warning",
"proc-macro2 1.0.86",
"quote 1.0.37",
"sp-version 29.0.0",
@@ -27875,7 +28061,7 @@ dependencies = [
"jsonrpsee",
"kitchensink-runtime",
"log",
- "nix 0.28.0",
+ "nix 0.29.0",
"node-primitives",
"node-rpc",
"node-testing",
@@ -28098,7 +28284,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6"
dependencies = [
"bitflags 1.3.2",
- "cfg_aliases",
+ "cfg_aliases 0.1.1",
"libc",
"parking_lot 0.11.2",
"parking_lot_core 0.8.6",
@@ -28112,7 +28298,7 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf"
dependencies = [
- "cfg_aliases",
+ "cfg_aliases 0.1.1",
"memchr",
"proc-macro2 1.0.86",
"quote 1.0.37",
@@ -28303,7 +28489,7 @@ version = "0.1.0"
dependencies = [
"assert_cmd",
"futures",
- "nix 0.28.0",
+ "nix 0.29.0",
"node-primitives",
"regex",
"sc-cli",
@@ -28610,7 +28796,7 @@ dependencies = [
"merkleized-metadata",
"parity-scale-codec",
"parity-wasm",
- "polkavm-linker 0.9.2",
+ "polkavm-linker 0.18.0",
"sc-executor 0.32.0",
"shlex",
"sp-core 28.0.0",
@@ -28676,7 +28862,7 @@ dependencies = [
"log",
"num-format",
"rand",
- "reqwest 0.12.5",
+ "reqwest 0.12.9",
"scale-info",
"semver 1.0.18",
"serde",
@@ -28997,11 +29183,32 @@ dependencies = [
"syn 2.0.87",
]
+[[package]]
+name = "syn-solidity"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "219389c1ebe89f8333df8bdfb871f6631c552ff399c23cac02480b6088aad8f0"
+dependencies = [
+ "paste",
+ "proc-macro2 1.0.86",
+ "quote 1.0.37",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
[[package]]
name = "sync_wrapper"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
+dependencies = [
+ "futures-core",
+]
[[package]]
name = "synstructure"
@@ -29094,7 +29301,7 @@ dependencies = [
"cfg-if",
"fastrand 2.1.0",
"redox_syscall 0.4.1",
- "rustix 0.38.25",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
@@ -29124,7 +29331,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
dependencies = [
- "rustix 0.38.25",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
@@ -29654,7 +29861,7 @@ version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"serde",
"serde_spanned",
"toml_datetime",
@@ -29667,7 +29874,7 @@ version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
dependencies = [
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"toml_datetime",
"winnow 0.5.15",
]
@@ -29678,7 +29885,7 @@ version = "0.22.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef"
dependencies = [
- "indexmap 2.2.3",
+ "indexmap 2.7.0",
"serde",
"serde_spanned",
"toml_datetime",
@@ -29938,78 +30145,6 @@ dependencies = [
"keccak-hasher",
]
-[[package]]
-name = "trust-dns-proto"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26"
-dependencies = [
- "async-trait",
- "cfg-if",
- "data-encoding",
- "enum-as-inner 0.5.1",
- "futures-channel",
- "futures-io",
- "futures-util",
- "idna 0.2.3",
- "ipnet",
- "lazy_static",
- "rand",
- "smallvec",
- "socket2 0.4.9",
- "thiserror",
- "tinyvec",
- "tokio",
- "tracing",
- "url",
-]
-
-[[package]]
-name = "trust-dns-proto"
-version = "0.23.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374"
-dependencies = [
- "async-trait",
- "cfg-if",
- "data-encoding",
- "enum-as-inner 0.6.0",
- "futures-channel",
- "futures-io",
- "futures-util",
- "idna 0.4.0",
- "ipnet",
- "once_cell",
- "rand",
- "smallvec",
- "thiserror",
- "tinyvec",
- "tokio",
- "tracing",
- "url",
-]
-
-[[package]]
-name = "trust-dns-resolver"
-version = "0.23.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6"
-dependencies = [
- "cfg-if",
- "futures-util",
- "ipconfig",
- "lru-cache",
- "once_cell",
- "parking_lot 0.12.3",
- "rand",
- "resolv-conf",
- "smallvec",
- "thiserror",
- "tokio",
- "tracing",
- "trust-dns-proto 0.23.2",
-]
-
[[package]]
name = "try-lock"
version = "0.2.4"
@@ -30219,7 +30354,7 @@ version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105"
dependencies = [
- "asynchronous-codec",
+ "asynchronous-codec 0.6.2",
"bytes",
"futures-io",
"futures-util",
@@ -30968,7 +31103,7 @@ version = "0.22.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53"
dependencies = [
- "ring 0.17.7",
+ "ring 0.17.8",
"untrusted 0.9.0",
]
@@ -31261,6 +31396,36 @@ dependencies = [
"windows-targets 0.52.6",
]
+[[package]]
+name = "windows-registry"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0"
+dependencies = [
+ "windows-result",
+ "windows-strings",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-result"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
+dependencies = [
+ "windows-result",
+ "windows-targets 0.52.6",
+]
+
[[package]]
name = "windows-sys"
version = "0.45.0"
@@ -31503,16 +31668,6 @@ dependencies = [
"windows-sys 0.48.0",
]
-[[package]]
-name = "winreg"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
-dependencies = [
- "cfg-if",
- "windows-sys 0.48.0",
-]
-
[[package]]
name = "wyz"
version = "0.5.1"
@@ -31534,35 +31689,18 @@ dependencies = [
"zeroize",
]
-[[package]]
-name = "x509-parser"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da"
-dependencies = [
- "asn1-rs 0.5.2",
- "data-encoding",
- "der-parser 8.2.0",
- "lazy_static",
- "nom",
- "oid-registry 0.6.1",
- "rusticata-macros",
- "thiserror",
- "time",
-]
-
[[package]]
name = "x509-parser"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69"
dependencies = [
- "asn1-rs 0.6.1",
+ "asn1-rs",
"data-encoding",
- "der-parser 9.0.0",
+ "der-parser",
"lazy_static",
"nom",
- "oid-registry 0.7.0",
+ "oid-registry",
"rusticata-macros",
"thiserror",
"time",
@@ -31640,10 +31778,13 @@ name = "xcm-executor-integration-tests"
version = "1.0.0"
dependencies = [
"frame-support 28.0.0",
+ "frame-system 28.0.0",
"futures",
+ "pallet-sudo 28.0.0",
"pallet-transaction-payment 28.0.0",
"pallet-xcm 7.0.0",
"parity-scale-codec",
+ "polkadot-runtime-parachains 7.0.0",
"polkadot-test-client",
"polkadot-test-runtime",
"polkadot-test-service",
@@ -31662,6 +31803,7 @@ name = "xcm-procedural"
version = "7.0.0"
dependencies = [
"Inflector",
+ "frame-support 28.0.0",
"proc-macro2 1.0.86",
"quote 1.0.37",
"staging-xcm 7.0.0",
@@ -31848,6 +31990,22 @@ dependencies = [
"static_assertions",
]
+[[package]]
+name = "yamux"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31b5e376a8b012bee9c423acdbb835fc34d45001cfa3106236a624e4b738028"
+dependencies = [
+ "futures",
+ "log",
+ "nohash-hasher",
+ "parking_lot 0.12.3",
+ "pin-project",
+ "rand",
+ "static_assertions",
+ "web-time",
+]
+
[[package]]
name = "yansi"
version = "0.5.1"
@@ -31915,7 +32073,7 @@ version = "1.0.0"
dependencies = [
"futures-util",
"parity-scale-codec",
- "reqwest 0.11.20",
+ "reqwest 0.12.9",
"serde",
"serde_json",
"thiserror",
@@ -31927,15 +32085,15 @@ dependencies = [
[[package]]
name = "zombienet-configuration"
-version = "0.2.16"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ad4fc5b0f1aa54de6bf2d6771c449b41cad47e1cf30559af0a71452686b47ab"
+checksum = "d716b3ff8112d98ced15f53b0c72454f8cde533fe2b68bb04379228961efbd80"
dependencies = [
"anyhow",
"lazy_static",
"multiaddr 0.18.1",
"regex",
- "reqwest 0.11.20",
+ "reqwest 0.11.27",
"serde",
"serde_json",
"thiserror",
@@ -31947,21 +32105,21 @@ dependencies = [
[[package]]
name = "zombienet-orchestrator"
-version = "0.2.16"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4a7dd25842ded75c7f4dc4f38f05fef567bd0b37fd3057c223d4ee34d8fa817"
+checksum = "4098a7d33b729b59e32c41a87aa4d484bd1b8771a059bbd4edfb4d430b3b2d74"
dependencies = [
"anyhow",
"async-trait",
"futures",
"glob-match",
"hex",
- "libp2p",
+ "libp2p 0.52.4",
"libsecp256k1",
"multiaddr 0.18.1",
"rand",
"regex",
- "reqwest 0.11.20",
+ "reqwest 0.11.27",
"serde",
"serde_json",
"sha2 0.10.8",
@@ -31980,9 +32138,9 @@ dependencies = [
[[package]]
name = "zombienet-prom-metrics-parser"
-version = "0.2.16"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a63e0c6024dd19b0f8b28afa94f78c211e5c163350ecda4a48084532d74d7cfe"
+checksum = "961e30be45b34f6ebeabf29ee2f47b0cd191ea62e40c064752572207509a6f5c"
dependencies = [
"pest",
"pest_derive",
@@ -31991,9 +32149,9 @@ dependencies = [
[[package]]
name = "zombienet-provider"
-version = "0.2.16"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d87c29390a342d0f4f62b6796861fb82e0e56c49929a272b689e8dbf24eaab9"
+checksum = "ab0f7f01780b7c99a6c40539d195d979f234305f32808d547438b50829d44262"
dependencies = [
"anyhow",
"async-trait",
@@ -32004,7 +32162,7 @@ dependencies = [
"kube",
"nix 0.27.1",
"regex",
- "reqwest 0.11.20",
+ "reqwest 0.11.27",
"serde",
"serde_json",
"serde_yaml",
@@ -32022,14 +32180,15 @@ dependencies = [
[[package]]
name = "zombienet-sdk"
-version = "0.2.16"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "829e5111182caf00ba57cd63656cf0bde6ce6add7f6a9747d15821c202a3f27e"
+checksum = "99a3c5f2d657235b3ab7dc384677e63cde21983029e99106766ecd49e9f8d7f3"
dependencies = [
"async-trait",
"futures",
"lazy_static",
"subxt",
+ "subxt-signer",
"tokio",
"zombienet-configuration",
"zombienet-orchestrator",
@@ -32039,9 +32198,9 @@ dependencies = [
[[package]]
name = "zombienet-support"
-version = "0.2.16"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99568384a1d9645458ab9de377b3517cb543a1ece5aba905aeb58d269139df4e"
+checksum = "296f887ea88e07edd771f8e1d0dec5297a58b422f4b884a6292a21ebe03277cb"
dependencies = [
"anyhow",
"async-trait",
@@ -32049,7 +32208,7 @@ dependencies = [
"nix 0.27.1",
"rand",
"regex",
- "reqwest 0.11.20",
+ "reqwest 0.11.27",
"thiserror",
"tokio",
"tracing",
diff --git a/Cargo.toml b/Cargo.toml
index b1a52712e736..64a11a340d10 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -293,6 +293,7 @@ members = [
"substrate/client/rpc-api",
"substrate/client/rpc-servers",
"substrate/client/rpc-spec-v2",
+ "substrate/client/runtime-utilities",
"substrate/client/service",
"substrate/client/service/test",
"substrate/client/state-db",
@@ -594,8 +595,7 @@ zero-prefixed-literal = { level = "allow", priority = 2 } # 00_1000_0
Inflector = { version = "0.11.4" }
aes-gcm = { version = "0.10" }
ahash = { version = "0.8.2" }
-alloy-primitives = { version = "0.4.2", default-features = false }
-alloy-sol-types = { version = "0.4.2", default-features = false }
+alloy-core = { version = "0.8.15", default-features = false }
always-assert = { version = "0.1" }
anyhow = { version = "1.0.81", default-features = false }
approx = { version = "0.5.1" }
@@ -841,20 +841,20 @@ kvdb-shared-tests = { version = "0.11.0" }
landlock = { version = "0.3.0" }
libc = { version = "0.2.155" }
libfuzzer-sys = { version = "0.4" }
-libp2p = { version = "0.52.4" }
+libp2p = { version = "0.54.1" }
libp2p-identity = { version = "0.2.9" }
libsecp256k1 = { version = "0.7.0", default-features = false }
linked-hash-map = { version = "0.5.4" }
linked_hash_set = { version = "0.1.4" }
linregress = { version = "0.5.1" }
lite-json = { version = "0.2.0", default-features = false }
-litep2p = { version = "0.8.1", features = ["websocket"] }
+litep2p = { version = "0.8.4", features = ["websocket"] }
log = { version = "0.4.22", default-features = false }
macro_magic = { version = "0.5.1" }
maplit = { version = "1.0.2" }
memmap2 = { version = "0.9.3" }
memory-db = { version = "0.32.0", default-features = false }
-merkleized-metadata = { version = "0.1.2" }
+merkleized-metadata = { version = "0.2.0" }
merlin = { version = "3.0", default-features = false }
messages-relay = { path = "bridges/relays/messages" }
metered = { version = "0.6.1", default-features = false, package = "prioritized-metered-channel" }
@@ -871,7 +871,7 @@ multihash = { version = "0.19.1", default-features = false }
multihash-codetable = { version = "0.1.1" }
multistream-select = { version = "0.13.0" }
names = { version = "0.14.0", default-features = false }
-nix = { version = "0.28.0" }
+nix = { version = "0.29.0" }
node-cli = { path = "substrate/bin/node/cli", package = "staging-node-cli" }
node-inspect = { path = "substrate/bin/node/inspect", default-features = false, package = "staging-node-inspect" }
node-primitives = { path = "substrate/bin/node/primitives", default-features = false }
@@ -1089,9 +1089,9 @@ polkadot-subsystem-bench = { path = "polkadot/node/subsystem-bench" }
polkadot-test-client = { path = "polkadot/node/test/client" }
polkadot-test-runtime = { path = "polkadot/runtime/test-runtime" }
polkadot-test-service = { path = "polkadot/node/test/service" }
-polkavm = { version = "0.9.3", default-features = false }
-polkavm-derive = "0.9.1"
-polkavm-linker = "0.9.2"
+polkavm = { version = "0.18.0", default-features = false }
+polkavm-derive = "0.18.0"
+polkavm-linker = "0.18.0"
portpicker = { version = "0.1.1" }
pretty_assertions = { version = "1.3.0" }
primitive-types = { version = "0.13.1", default-features = false, features = [
@@ -1123,7 +1123,7 @@ regex = { version = "1.10.2" }
relay-substrate-client = { path = "bridges/relays/client-substrate" }
relay-utils = { path = "bridges/relays/utils" }
remote-externalities = { path = "substrate/utils/frame/remote-externalities", default-features = false, package = "frame-remote-externalities" }
-reqwest = { version = "0.11", default-features = false }
+reqwest = { version = "0.12.9", default-features = false }
rlp = { version = "0.6.1", default-features = false }
rococo-emulated-chain = { path = "cumulus/parachains/integration-tests/emulated/chains/relays/rococo" }
rococo-parachain-runtime = { path = "cumulus/parachains/runtimes/testing/rococo-parachain" }
@@ -1184,6 +1184,7 @@ sc-rpc-api = { path = "substrate/client/rpc-api", default-features = false }
sc-rpc-server = { path = "substrate/client/rpc-servers", default-features = false }
sc-rpc-spec-v2 = { path = "substrate/client/rpc-spec-v2", default-features = false }
sc-runtime-test = { path = "substrate/client/executor/runtime-test" }
+sc-runtime-utilities = { path = "substrate/client/runtime-utilities", default-features = true }
sc-service = { path = "substrate/client/service", default-features = false }
sc-service-test = { path = "substrate/client/service/test" }
sc-state-db = { path = "substrate/client/state-db", default-features = false }
@@ -1197,7 +1198,7 @@ sc-tracing-proc-macro = { path = "substrate/client/tracing/proc-macro", default-
sc-transaction-pool = { path = "substrate/client/transaction-pool", default-features = false }
sc-transaction-pool-api = { path = "substrate/client/transaction-pool/api", default-features = false }
sc-utils = { path = "substrate/client/utils", default-features = false }
-scale-info = { version = "2.11.1", default-features = false }
+scale-info = { version = "2.11.6", default-features = false }
schemars = { version = "0.8.13", default-features = false }
schnellru = { version = "0.2.3" }
schnorrkel = { version = "0.11.4", default-features = false }
@@ -1317,6 +1318,7 @@ substrate-test-runtime-transaction-pool = { path = "substrate/test-utils/runtime
substrate-test-utils = { path = "substrate/test-utils" }
substrate-wasm-builder = { path = "substrate/utils/wasm-builder", default-features = false }
subxt = { version = "0.38", default-features = false }
+subxt-metadata = { version = "0.38.0", default-features = false }
subxt-signer = { version = "0.38" }
syn = { version = "2.0.87" }
sysinfo = { version = "0.30" }
@@ -1387,7 +1389,7 @@ xcm-procedural = { path = "polkadot/xcm/procedural", default-features = false }
xcm-runtime-apis = { path = "polkadot/xcm/xcm-runtime-apis", default-features = false }
xcm-simulator = { path = "polkadot/xcm/xcm-simulator", default-features = false }
zeroize = { version = "1.7.0", default-features = false }
-zombienet-sdk = { version = "0.2.16" }
+zombienet-sdk = { version = "0.2.19" }
zstd = { version = "0.12.4", default-features = false }
[profile.release]
diff --git a/bridges/bin/runtime-common/Cargo.toml b/bridges/bin/runtime-common/Cargo.toml
index 37b56140c289..49cd086fd3eb 100644
--- a/bridges/bin/runtime-common/Cargo.toml
+++ b/bridges/bin/runtime-common/Cargo.toml
@@ -99,6 +99,7 @@ runtime-benchmarks = [
"pallet-utility/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"sp-trie",
+ "xcm/runtime-benchmarks",
]
integrity-test = ["static_assertions"]
test-helpers = ["bp-runtime/test-helpers", "sp-trie"]
diff --git a/bridges/chains/chain-asset-hub-rococo/Cargo.toml b/bridges/chains/chain-asset-hub-rococo/Cargo.toml
index 7a83bba87481..4eb93ab52bc9 100644
--- a/bridges/chains/chain-asset-hub-rococo/Cargo.toml
+++ b/bridges/chains/chain-asset-hub-rococo/Cargo.toml
@@ -14,7 +14,26 @@ exclude-from-umbrella = true
workspace = true
[dependencies]
+codec = { workspace = true }
+scale-info = { features = ["derive"], workspace = true }
+
+# Substrate Dependencies
+frame-support = { workspace = true }
+sp-core = { workspace = true }
+
+# Bridge Dependencies
+bp-xcm-bridge-hub-router = { workspace = true }
+
+# Polkadot dependencies
+xcm = { workspace = true }
[features]
default = ["std"]
-std = []
+std = [
+ "bp-xcm-bridge-hub-router/std",
+ "codec/std",
+ "frame-support/std",
+ "scale-info/std",
+ "sp-core/std",
+ "xcm/std",
+]
diff --git a/bridges/chains/chain-asset-hub-rococo/src/lib.rs b/bridges/chains/chain-asset-hub-rococo/src/lib.rs
index 3504be9bb0f8..1467831beba9 100644
--- a/bridges/chains/chain-asset-hub-rococo/src/lib.rs
+++ b/bridges/chains/chain-asset-hub-rococo/src/lib.rs
@@ -18,5 +18,56 @@
#![cfg_attr(not(feature = "std"), no_std)]
+extern crate alloc;
+
+use codec::{Decode, Encode};
+use scale_info::TypeInfo;
+
+pub use bp_xcm_bridge_hub_router::XcmBridgeHubRouterCall;
+use xcm::latest::prelude::*;
+
+/// `AssetHubRococo` Runtime `Call` enum.
+///
+/// The enum represents a subset of possible `Call`s we can send to `AssetHubRococo` chain.
+/// Ideally this code would be auto-generated from metadata, because we want to
+/// avoid depending directly on the ENTIRE runtime just to get the encoding of `Dispatchable`s.
+///
+/// All entries here (like pretty much in the entire file) must be kept in sync with
+/// `AssetHubRococo` `construct_runtime`, so that we maintain SCALE-compatibility.
+#[allow(clippy::large_enum_variant)]
+#[derive(Encode, Decode, Debug, PartialEq, Eq, Clone, TypeInfo)]
+pub enum Call {
+ /// `ToWestendXcmRouter` bridge pallet.
+ #[codec(index = 45)]
+ ToWestendXcmRouter(XcmBridgeHubRouterCall),
+}
+
+frame_support::parameter_types! {
+ /// Some sane weight to execute `xcm::Transact(pallet-xcm-bridge-hub-router::Call::report_bridge_status)`.
+ pub const XcmBridgeHubRouterTransactCallMaxWeight: frame_support::weights::Weight = frame_support::weights::Weight::from_parts(200_000_000, 6144);
+}
+
+/// Builds an (un)congestion XCM program with the `report_bridge_status` call for
+/// `ToWestendXcmRouter`.
+pub fn build_congestion_message(
+ bridge_id: sp_core::H256,
+ is_congested: bool,
+) -> alloc::vec::Vec> {
+ alloc::vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind: OriginKind::Xcm,
+ fallback_max_weight: Some(XcmBridgeHubRouterTransactCallMaxWeight::get()),
+ call: Call::ToWestendXcmRouter(XcmBridgeHubRouterCall::report_bridge_status {
+ bridge_id,
+ is_congested,
+ })
+ .encode()
+ .into(),
+ },
+ ExpectTransactStatus(MaybeErrorCode::Success),
+ ]
+}
+
/// Identifier of AssetHubRococo in the Rococo relay chain.
pub const ASSET_HUB_ROCOCO_PARACHAIN_ID: u32 = 1000;
diff --git a/bridges/chains/chain-asset-hub-westend/Cargo.toml b/bridges/chains/chain-asset-hub-westend/Cargo.toml
index ad8d2778a4bc..22071399f4d1 100644
--- a/bridges/chains/chain-asset-hub-westend/Cargo.toml
+++ b/bridges/chains/chain-asset-hub-westend/Cargo.toml
@@ -14,7 +14,26 @@ exclude-from-umbrella = true
workspace = true
[dependencies]
+codec = { workspace = true }
+scale-info = { features = ["derive"], workspace = true }
+
+# Substrate Dependencies
+frame-support = { workspace = true }
+sp-core = { workspace = true }
+
+# Bridge Dependencies
+bp-xcm-bridge-hub-router = { workspace = true }
+
+# Polkadot dependencies
+xcm = { workspace = true }
[features]
default = ["std"]
-std = []
+std = [
+ "bp-xcm-bridge-hub-router/std",
+ "codec/std",
+ "frame-support/std",
+ "scale-info/std",
+ "sp-core/std",
+ "xcm/std",
+]
diff --git a/bridges/chains/chain-asset-hub-westend/src/lib.rs b/bridges/chains/chain-asset-hub-westend/src/lib.rs
index c21bdff45934..9064c7f900f5 100644
--- a/bridges/chains/chain-asset-hub-westend/src/lib.rs
+++ b/bridges/chains/chain-asset-hub-westend/src/lib.rs
@@ -18,5 +18,56 @@
#![cfg_attr(not(feature = "std"), no_std)]
+extern crate alloc;
+
+use codec::{Decode, Encode};
+use scale_info::TypeInfo;
+
+pub use bp_xcm_bridge_hub_router::XcmBridgeHubRouterCall;
+use xcm::latest::prelude::*;
+
+/// `AssetHubWestend` Runtime `Call` enum.
+///
+/// The enum represents a subset of possible `Call`s we can send to `AssetHubWestend` chain.
+/// Ideally this code would be auto-generated from metadata, because we want to
+/// avoid depending directly on the ENTIRE runtime just to get the encoding of `Dispatchable`s.
+///
+/// All entries here (like pretty much in the entire file) must be kept in sync with
+/// `AssetHubWestend` `construct_runtime`, so that we maintain SCALE-compatibility.
+#[allow(clippy::large_enum_variant)]
+#[derive(Encode, Decode, Debug, PartialEq, Eq, Clone, TypeInfo)]
+pub enum Call {
+ /// `ToRococoXcmRouter` bridge pallet.
+ #[codec(index = 34)]
+ ToRococoXcmRouter(XcmBridgeHubRouterCall),
+}
+
+frame_support::parameter_types! {
+ /// Some sane weight to execute `xcm::Transact(pallet-xcm-bridge-hub-router::Call::report_bridge_status)`.
+ pub const XcmBridgeHubRouterTransactCallMaxWeight: frame_support::weights::Weight = frame_support::weights::Weight::from_parts(200_000_000, 6144);
+}
+
+/// Builds an (un)congestion XCM program with the `report_bridge_status` call for
+/// `ToRococoXcmRouter`.
+pub fn build_congestion_message(
+ bridge_id: sp_core::H256,
+ is_congested: bool,
+) -> alloc::vec::Vec> {
+ alloc::vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind: OriginKind::Xcm,
+ fallback_max_weight: Some(XcmBridgeHubRouterTransactCallMaxWeight::get()),
+ call: Call::ToRococoXcmRouter(XcmBridgeHubRouterCall::report_bridge_status {
+ bridge_id,
+ is_congested,
+ })
+ .encode()
+ .into(),
+ },
+ ExpectTransactStatus(MaybeErrorCode::Success),
+ ]
+}
+
/// Identifier of AssetHubWestend in the Westend relay chain.
pub const ASSET_HUB_WESTEND_PARACHAIN_ID: u32 = 1000;
diff --git a/bridges/chains/chain-polkadot-bulletin/src/lib.rs b/bridges/chains/chain-polkadot-bulletin/src/lib.rs
index c5c18beb2cad..070bc7b0ba3d 100644
--- a/bridges/chains/chain-polkadot-bulletin/src/lib.rs
+++ b/bridges/chains/chain-polkadot-bulletin/src/lib.rs
@@ -225,4 +225,4 @@ impl ChainWithMessages for PolkadotBulletin {
}
decl_bridge_finality_runtime_apis!(polkadot_bulletin, grandpa);
-decl_bridge_messages_runtime_apis!(polkadot_bulletin, bp_messages::HashedLaneId);
+decl_bridge_messages_runtime_apis!(polkadot_bulletin, bp_messages::LegacyLaneId);
diff --git a/bridges/modules/relayers/src/extension/mod.rs b/bridges/modules/relayers/src/extension/mod.rs
index bfabfe3c3ed5..871a964eb5a3 100644
--- a/bridges/modules/relayers/src/extension/mod.rs
+++ b/bridges/modules/relayers/src/extension/mod.rs
@@ -129,7 +129,7 @@ pub struct BridgeRelayersTransactionExtension(
impl BridgeRelayersTransactionExtension
where
Self: 'static + Send + Sync,
- R: RelayersConfig
+ R: RelayersConfig
+ BridgeMessagesConfig
+ TransactionPaymentConfig,
C: ExtensionConfig,
@@ -250,7 +250,7 @@ where
// let's also replace the weight of slashing relayer with the weight of rewarding relayer
if call_info.is_receive_messages_proof_call() {
post_info_weight = post_info_weight.saturating_sub(
- ::WeightInfo::extra_weight_of_successful_receive_messages_proof_call(),
+ >::WeightInfo::extra_weight_of_successful_receive_messages_proof_call(),
);
}
@@ -278,7 +278,7 @@ impl TransactionExtension
for BridgeRelayersTransactionExtension
where
Self: 'static + Send + Sync,
- R: RelayersConfig
+ R: RelayersConfig
+ BridgeMessagesConfig
+ TransactionPaymentConfig,
C: ExtensionConfig,
@@ -326,7 +326,9 @@ where
};
// we only boost priority if relayer has staked required balance
- if !RelayersPallet::::is_registration_active(&data.relayer) {
+ if !RelayersPallet::::is_registration_active(
+ &data.relayer,
+ ) {
return Ok((Default::default(), Some(data), origin))
}
@@ -382,7 +384,11 @@ where
match call_result {
RelayerAccountAction::None => (),
RelayerAccountAction::Reward(relayer, reward_account, reward) => {
- RelayersPallet::::register_relayer_reward(reward_account, &relayer, reward);
+ RelayersPallet::::register_relayer_reward(
+ reward_account,
+ &relayer,
+ reward,
+ );
log::trace!(
target: LOG_TARGET,
@@ -394,7 +400,7 @@ where
);
},
RelayerAccountAction::Slash(relayer, slash_account) =>
- RelayersPallet::::slash_and_deregister(
+ RelayersPallet::::slash_and_deregister(
&relayer,
ExplicitOrAccountParams::Params(slash_account),
),
diff --git a/bridges/modules/xcm-bridge-hub-router/Cargo.toml b/bridges/modules/xcm-bridge-hub-router/Cargo.toml
index 1cda8893967e..a61bd070bc1e 100644
--- a/bridges/modules/xcm-bridge-hub-router/Cargo.toml
+++ b/bridges/modules/xcm-bridge-hub-router/Cargo.toml
@@ -58,6 +58,7 @@ runtime-benchmarks = [
"frame-system/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
try-runtime = [
"frame-support/try-runtime",
diff --git a/bridges/modules/xcm-bridge-hub/Cargo.toml b/bridges/modules/xcm-bridge-hub/Cargo.toml
index 209c5b6d38fa..53c911077260 100644
--- a/bridges/modules/xcm-bridge-hub/Cargo.toml
+++ b/bridges/modules/xcm-bridge-hub/Cargo.toml
@@ -40,6 +40,7 @@ sp-io = { workspace = true }
bp-runtime = { workspace = true }
bp-header-chain = { workspace = true }
pallet-xcm-bridge-hub-router = { workspace = true }
+bp-xcm-bridge-hub-router = { workspace = true }
polkadot-parachain-primitives = { workspace = true }
[features]
@@ -48,6 +49,7 @@ std = [
"bp-header-chain/std",
"bp-messages/std",
"bp-runtime/std",
+ "bp-xcm-bridge-hub-router/std",
"bp-xcm-bridge-hub/std",
"codec/std",
"frame-benchmarking/std",
@@ -78,6 +80,7 @@ runtime-benchmarks = [
"sp-runtime/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
try-runtime = [
"frame-support/try-runtime",
diff --git a/bridges/modules/xcm-bridge-hub/src/exporter.rs b/bridges/modules/xcm-bridge-hub/src/exporter.rs
index 134a5c3ad804..da18ce828a84 100644
--- a/bridges/modules/xcm-bridge-hub/src/exporter.rs
+++ b/bridges/modules/xcm-bridge-hub/src/exporter.rs
@@ -814,6 +814,9 @@ mod tests {
>,
>(dest.clone(), Xcm::<()>::default()));
+ // we need to set `UniversalLocation` for `sibling_parachain_origin` for
+ // `XcmOverBridgeWrappedWithExportMessageRouterInstance`.
+ ExportMessageOriginUniversalLocation::set(Some(SiblingUniversalLocation::get()));
// send `ExportMessage(message)` by `pallet_xcm_bridge_hub_router`.
ExecuteXcmOverSendXcm::set_origin_for_execute(origin_as_location);
assert_ok!(send_xcm::(
diff --git a/bridges/modules/xcm-bridge-hub/src/mock.rs b/bridges/modules/xcm-bridge-hub/src/mock.rs
index 8e6634af160c..4fc38e18deca 100644
--- a/bridges/modules/xcm-bridge-hub/src/mock.rs
+++ b/bridges/modules/xcm-bridge-hub/src/mock.rs
@@ -249,7 +249,7 @@ impl crate::benchmarking::Config<()> for TestRuntime {
/// the `MessageExporter`. This means that the router sends an `ExportMessage`.
pub type XcmOverBridgeWrappedWithExportMessageRouterInstance = ();
#[derive_impl(pallet_xcm_bridge_hub_router::config_preludes::TestDefaultConfig)]
-impl pallet_xcm_bridge_hub_router::Config<()> for TestRuntime {
+impl pallet_xcm_bridge_hub_router::Config for TestRuntime {
// We use `SovereignPaidRemoteExporter` here to test and ensure that the `ExportMessage`
// produced by `pallet_xcm_bridge_hub_router` is compatible with the `ExportXcm` implementation
// of `pallet_xcm_bridge_hub`.
@@ -512,10 +512,10 @@ pub struct TestingLocalXcmChannelManager(PhantomData<(Bridge, Te
impl TestingLocalXcmChannelManager {
fn suspended_key(bridge: &Bridge) -> Vec {
- [b"SwitchedLocalXcmChannelManager.Suspended", bridge.encode().as_slice()].concat()
+ [b"TestingLocalXcmChannelManager.Suspended", bridge.encode().as_slice()].concat()
}
fn resumed_key(bridge: &Bridge) -> Vec {
- [b"SwitchedLocalXcmChannelManager.Resumed", bridge.encode().as_slice()].concat()
+ [b"TestingLocalXcmChannelManager.Resumed", bridge.encode().as_slice()].concat()
}
pub fn is_bridge_suspened(bridge: &Bridge) -> bool {
@@ -559,7 +559,11 @@ impl Convert, Xcm<()>> for UpdateBridgeStatusXcmProvider {
fn convert(encoded_call: Vec) -> Xcm<()> {
Xcm(vec![
UnpaidExecution { weight_limit: Unlimited, check_origin: None },
- Transact { origin_kind: OriginKind::Xcm, call: encoded_call.into() },
+ Transact {
+ origin_kind: OriginKind::Xcm,
+ fallback_max_weight: Some(Weight::from_parts(200_000_000, 6144)),
+ call: encoded_call.into()
+ },
ExpectTransactStatus(MaybeErrorCode::Success),
])
}
diff --git a/bridges/primitives/xcm-bridge-hub-router/src/lib.rs b/bridges/primitives/xcm-bridge-hub-router/src/lib.rs
index f2e4a794c0ad..28561d5940f0 100644
--- a/bridges/primitives/xcm-bridge-hub-router/src/lib.rs
+++ b/bridges/primitives/xcm-bridge-hub-router/src/lib.rs
@@ -63,3 +63,13 @@ impl ResolveBridgeId for () {
None
}
}
+
+// TODO:revert-for-depracated: BridgeId->H256
+/// A minimized version of `pallet-xcm-bridge-hub-router::Call` that can be used without a runtime.
+#[derive(Encode, Decode, Debug, PartialEq, Eq, Clone, TypeInfo)]
+#[allow(non_camel_case_types)]
+pub enum XcmBridgeHubRouterCall {
+ /// `pallet-xcm-bridge-hub-router::Call::report_bridge_status`
+ #[codec(index = 0)]
+ report_bridge_status { bridge_id: BridgeId, is_congested: bool },
+}
\ No newline at end of file
diff --git a/bridges/primitives/xcm-bridge-hub/src/lib.rs b/bridges/primitives/xcm-bridge-hub/src/lib.rs
index a274a9717de8..511bb7f019e8 100644
--- a/bridges/primitives/xcm-bridge-hub/src/lib.rs
+++ b/bridges/primitives/xcm-bridge-hub/src/lib.rs
@@ -87,6 +87,11 @@ impl BridgeId {
.into(),
)
}
+
+ /// Access the inner representation.
+ pub fn inner(&self) -> H256 {
+ self.0
+ }
}
impl core::fmt::Debug for BridgeId {
diff --git a/bridges/relays/utils/src/initialize.rs b/bridges/relays/utils/src/initialize.rs
index 564ed1f0e5cc..deb9b9d059d5 100644
--- a/bridges/relays/utils/src/initialize.rs
+++ b/bridges/relays/utils/src/initialize.rs
@@ -52,9 +52,10 @@ pub fn initialize_logger(with_timestamp: bool) {
format,
);
- let env_filter = EnvFilter::from_default_env()
- .add_directive(Level::WARN.into())
- .add_directive("bridge=info".parse().expect("static filter string is valid"));
+ let env_filter = EnvFilter::builder()
+ .with_default_directive(Level::WARN.into())
+ .with_default_directive("bridge=info".parse().expect("static filter string is valid"))
+ .from_env_lossy();
let builder = SubscriberBuilder::default().with_env_filter(env_filter);
diff --git a/bridges/snowbridge/pallets/inbound-queue/Cargo.toml b/bridges/snowbridge/pallets/inbound-queue/Cargo.toml
index 1b08bb39b434..c0789940a9e8 100644
--- a/bridges/snowbridge/pallets/inbound-queue/Cargo.toml
+++ b/bridges/snowbridge/pallets/inbound-queue/Cargo.toml
@@ -20,8 +20,7 @@ codec = { features = ["derive"], workspace = true }
scale-info = { features = ["derive"], workspace = true }
hex-literal = { optional = true, workspace = true, default-features = true }
log = { workspace = true }
-alloy-primitives = { features = ["rlp"], workspace = true }
-alloy-sol-types = { workspace = true }
+alloy-core = { workspace = true, features = ["sol-types"] }
frame-benchmarking = { optional = true, workspace = true }
frame-support = { workspace = true }
@@ -49,8 +48,7 @@ hex-literal = { workspace = true, default-features = true }
[features]
default = ["std"]
std = [
- "alloy-primitives/std",
- "alloy-sol-types/std",
+ "alloy-core/std",
"codec/std",
"frame-benchmarking/std",
"frame-support/std",
@@ -83,6 +81,7 @@ runtime-benchmarks = [
"snowbridge-router-primitives/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
try-runtime = [
"frame-support/try-runtime",
diff --git a/bridges/snowbridge/pallets/inbound-queue/src/envelope.rs b/bridges/snowbridge/pallets/inbound-queue/src/envelope.rs
index 31a8992442d8..d213c8aad648 100644
--- a/bridges/snowbridge/pallets/inbound-queue/src/envelope.rs
+++ b/bridges/snowbridge/pallets/inbound-queue/src/envelope.rs
@@ -5,8 +5,7 @@ use snowbridge_core::{inbound::Log, ChannelId};
use sp_core::{RuntimeDebug, H160, H256};
use sp_std::prelude::*;
-use alloy_primitives::B256;
-use alloy_sol_types::{sol, SolEvent};
+use alloy_core::{primitives::B256, sol, sol_types::SolEvent};
sol! {
event OutboundMessageAccepted(bytes32 indexed channel_id, uint64 nonce, bytes32 indexed message_id, bytes payload);
@@ -36,7 +35,7 @@ impl TryFrom<&Log> for Envelope {
fn try_from(log: &Log) -> Result {
let topics: Vec = log.topics.iter().map(|x| B256::from_slice(x.as_ref())).collect();
- let event = OutboundMessageAccepted::decode_log(topics, &log.data, true)
+ let event = OutboundMessageAccepted::decode_raw_log(topics, &log.data, true)
.map_err(|_| EnvelopeDecodeError)?;
Ok(Self {
@@ -44,7 +43,7 @@ impl TryFrom<&Log> for Envelope {
channel_id: ChannelId::from(event.channel_id.as_ref()),
nonce: event.nonce,
message_id: H256::from(event.message_id.as_ref()),
- payload: event.payload,
+ payload: event.payload.into(),
})
}
}
diff --git a/bridges/snowbridge/pallets/inbound-queue/src/mock.rs b/bridges/snowbridge/pallets/inbound-queue/src/mock.rs
index 675d4b691593..eed0656e9ca7 100644
--- a/bridges/snowbridge/pallets/inbound-queue/src/mock.rs
+++ b/bridges/snowbridge/pallets/inbound-queue/src/mock.rs
@@ -248,20 +248,6 @@ impl inbound_queue::Config for Test {
type AssetTransactor = SuccessfulTransactor;
}
-pub fn last_events(n: usize) -> Vec {
- frame_system::Pallet::::events()
- .into_iter()
- .rev()
- .take(n)
- .rev()
- .map(|e| e.event)
- .collect()
-}
-
-pub fn expect_events(e: Vec) {
- assert_eq!(last_events(e.len()), e);
-}
-
pub fn setup() {
System::set_block_number(1);
Balances::mint_into(
diff --git a/bridges/snowbridge/pallets/inbound-queue/src/test.rs b/bridges/snowbridge/pallets/inbound-queue/src/test.rs
index 76d0b98e9eb4..aa99d63b4bf9 100644
--- a/bridges/snowbridge/pallets/inbound-queue/src/test.rs
+++ b/bridges/snowbridge/pallets/inbound-queue/src/test.rs
@@ -5,11 +5,11 @@ use super::*;
use frame_support::{assert_noop, assert_ok};
use hex_literal::hex;
use snowbridge_core::{inbound::Proof, ChannelId};
-use sp_keyring::AccountKeyring as Keyring;
+use sp_keyring::Sr25519Keyring as Keyring;
use sp_runtime::DispatchError;
use sp_std::convert::From;
-use crate::{Error, Event as InboundQueueEvent};
+use crate::Error;
use crate::mock::*;
@@ -35,17 +35,16 @@ fn test_submit_happy_path() {
assert_eq!(Balances::balance(&channel_sovereign), initial_fund);
assert_ok!(InboundQueue::submit(origin.clone(), message.clone()));
- expect_events(vec![InboundQueueEvent::MessageReceived {
- channel_id: hex!("c173fac324158e77fb5840738a1a541f633cbec8884c6a601c567d2b376a0539")
- .into(),
- nonce: 1,
- message_id: [
- 11, 25, 133, 51, 23, 68, 111, 211, 132, 94, 254, 17, 194, 252, 198, 233, 10, 193,
- 156, 93, 72, 140, 65, 69, 79, 155, 154, 28, 141, 166, 171, 255,
- ],
- fee_burned: 110000000000,
- }
- .into()]);
+
+ let events = frame_system::Pallet::::events();
+ assert!(
+ events.iter().any(|event| matches!(
+ event.event,
+ RuntimeEvent::InboundQueue(Event::MessageReceived { nonce, ..})
+ if nonce == 1
+ )),
+ "no event emit."
+ );
let delivery_cost = InboundQueue::calculate_delivery_cost(message.encode().len() as u32);
assert!(
diff --git a/bridges/snowbridge/pallets/system/Cargo.toml b/bridges/snowbridge/pallets/system/Cargo.toml
index f1e749afb997..d8e124d73d14 100644
--- a/bridges/snowbridge/pallets/system/Cargo.toml
+++ b/bridges/snowbridge/pallets/system/Cargo.toml
@@ -71,6 +71,7 @@ runtime-benchmarks = [
"snowbridge-pallet-outbound-queue/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
try-runtime = [
"frame-support/try-runtime",
diff --git a/bridges/snowbridge/primitives/core/Cargo.toml b/bridges/snowbridge/primitives/core/Cargo.toml
index fa37c795b2d1..af002a5a965c 100644
--- a/bridges/snowbridge/primitives/core/Cargo.toml
+++ b/bridges/snowbridge/primitives/core/Cargo.toml
@@ -64,4 +64,5 @@ runtime-benchmarks = [
"sp-runtime/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
diff --git a/bridges/snowbridge/primitives/router/Cargo.toml b/bridges/snowbridge/primitives/router/Cargo.toml
index ee8d481cec12..1f7f489c6b18 100644
--- a/bridges/snowbridge/primitives/router/Cargo.toml
+++ b/bridges/snowbridge/primitives/router/Cargo.toml
@@ -51,4 +51,5 @@ runtime-benchmarks = [
"snowbridge-core/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
diff --git a/bridges/snowbridge/primitives/router/src/inbound/mod.rs b/bridges/snowbridge/primitives/router/src/inbound/mod.rs
index e03560f66e24..bc5d401cd4f7 100644
--- a/bridges/snowbridge/primitives/router/src/inbound/mod.rs
+++ b/bridges/snowbridge/primitives/router/src/inbound/mod.rs
@@ -279,6 +279,7 @@ where
// Call create_asset on foreign assets pallet.
Transact {
origin_kind: OriginKind::Xcm,
+ fallback_max_weight: Some(Weight::from_parts(400_000_000, 8_000)),
call: (
create_call_index,
asset_id,
@@ -357,7 +358,9 @@ where
}])),
// Perform a deposit reserve to send to destination chain.
DepositReserveAsset {
- assets: Definite(vec![dest_para_fee_asset.clone(), asset].into()),
+ // Send over assets and unspent fees, XCM delivery fee will be charged from
+ // here.
+ assets: Wild(AllCounted(2)),
dest: Location::new(1, [Parachain(dest_para_id)]),
xcm: vec![
// Buy execution on target.
diff --git a/bridges/snowbridge/runtime/runtime-common/Cargo.toml b/bridges/snowbridge/runtime/runtime-common/Cargo.toml
index d47cb3cb7101..514a4c186696 100644
--- a/bridges/snowbridge/runtime/runtime-common/Cargo.toml
+++ b/bridges/snowbridge/runtime/runtime-common/Cargo.toml
@@ -43,4 +43,5 @@ runtime-benchmarks = [
"snowbridge-core/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
diff --git a/bridges/snowbridge/runtime/test-common/Cargo.toml b/bridges/snowbridge/runtime/test-common/Cargo.toml
index 6f8e586bf5ff..cc1ed1288ca0 100644
--- a/bridges/snowbridge/runtime/test-common/Cargo.toml
+++ b/bridges/snowbridge/runtime/test-common/Cargo.toml
@@ -6,6 +6,8 @@ authors = ["Snowfork "]
edition.workspace = true
license = "Apache-2.0"
categories = ["cryptography::cryptocurrencies"]
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
@@ -90,5 +92,6 @@ runtime-benchmarks = [
"snowbridge-pallet-system/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
fast-runtime = []
diff --git a/bridges/snowbridge/runtime/test-common/src/lib.rs b/bridges/snowbridge/runtime/test-common/src/lib.rs
index dca5062ab310..5441dd822cac 100644
--- a/bridges/snowbridge/runtime/test-common/src/lib.rs
+++ b/bridges/snowbridge/runtime/test-common/src/lib.rs
@@ -13,7 +13,7 @@ use parachains_runtimes_test_utils::{
use snowbridge_core::{ChannelId, ParaId};
use snowbridge_pallet_ethereum_client_fixtures::*;
use sp_core::{Get, H160, U256};
-use sp_keyring::AccountKeyring::*;
+use sp_keyring::Sr25519Keyring::*;
use sp_runtime::{traits::Header, AccountId32, DigestItem, SaturatedConversion, Saturating};
use xcm::latest::prelude::*;
use xcm_executor::XcmExecutor;
@@ -431,7 +431,7 @@ pub fn ethereum_extrinsic(
collator_session_key: CollatorSessionKeys,
runtime_para_id: u32,
construct_and_apply_extrinsic: fn(
- sp_keyring::AccountKeyring,
+ sp_keyring::Sr25519Keyring,
::RuntimeCall,
) -> sp_runtime::DispatchOutcome,
) where
@@ -567,7 +567,7 @@ pub fn ethereum_to_polkadot_message_extrinsics_work(
collator_session_key: CollatorSessionKeys,
runtime_para_id: u32,
construct_and_apply_extrinsic: fn(
- sp_keyring::AccountKeyring,
+ sp_keyring::Sr25519Keyring,
::RuntimeCall,
) -> sp_runtime::DispatchOutcome,
) where
diff --git a/cumulus/client/cli/Cargo.toml b/cumulus/client/cli/Cargo.toml
index 9b6f6b73960b..198f9428f1dd 100644
--- a/cumulus/client/cli/Cargo.toml
+++ b/cumulus/client/cli/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Parachain node CLI utilities."
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/collator/Cargo.toml b/cumulus/client/collator/Cargo.toml
index 6ebde0c2c653..83a3f2661e7a 100644
--- a/cumulus/client/collator/Cargo.toml
+++ b/cumulus/client/collator/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Common node-side functionality and glue code to collate parachain blocks."
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/consensus/aura/Cargo.toml b/cumulus/client/consensus/aura/Cargo.toml
index 0bb2de6bb9b8..33f24e30ccfb 100644
--- a/cumulus/client/consensus/aura/Cargo.toml
+++ b/cumulus/client/consensus/aura/Cargo.toml
@@ -5,6 +5,8 @@ version = "0.7.0"
authors.workspace = true
edition.workspace = true
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
@@ -33,6 +35,7 @@ sp-blockchain = { workspace = true, default-features = true }
sp-consensus = { workspace = true, default-features = true }
sp-consensus-aura = { workspace = true, default-features = true }
sp-core = { workspace = true, default-features = true }
+sp-trie = { workspace = true, default-features = true }
sp-inherents = { workspace = true, default-features = true }
sp-keystore = { workspace = true, default-features = true }
sp-runtime = { workspace = true, default-features = true }
diff --git a/cumulus/client/consensus/aura/src/collators/slot_based/block_builder_task.rs b/cumulus/client/consensus/aura/src/collators/slot_based/block_builder_task.rs
index 425151230704..41751f1db530 100644
--- a/cumulus/client/consensus/aura/src/collators/slot_based/block_builder_task.rs
+++ b/cumulus/client/consensus/aura/src/collators/slot_based/block_builder_task.rs
@@ -23,30 +23,32 @@ use cumulus_primitives_aura::AuraUnincludedSegmentApi;
use cumulus_primitives_core::{GetCoreSelectorApi, PersistedValidationData};
use cumulus_relay_chain_interface::RelayChainInterface;
-use polkadot_primitives::{
- vstaging::{ClaimQueueOffset, CoreSelector, DEFAULT_CLAIM_QUEUE_OFFSET},
- BlockId, CoreIndex, Hash as RelayHash, Header as RelayHeader, Id as ParaId,
- OccupiedCoreAssumption,
-};
+use polkadot_primitives::Id as ParaId;
use futures::prelude::*;
use sc_client_api::{backend::AuxStore, BlockBackend, BlockOf, UsageProvider};
use sc_consensus::BlockImport;
-use sp_api::{ApiExt, ProvideRuntimeApi};
+use sp_api::ProvideRuntimeApi;
use sp_application_crypto::AppPublic;
use sp_blockchain::HeaderBackend;
use sp_consensus_aura::{AuraApi, Slot};
-use sp_core::{crypto::Pair, U256};
+use sp_core::crypto::Pair;
use sp_inherents::CreateInherentDataProviders;
use sp_keystore::KeystorePtr;
-use sp_runtime::traits::{Block as BlockT, Header as HeaderT, Member, One};
+use sp_runtime::traits::{Block as BlockT, Header as HeaderT, Member};
use sp_timestamp::Timestamp;
-use std::{collections::BTreeSet, sync::Arc, time::Duration};
+use std::{sync::Arc, time::Duration};
use super::CollatorMessage;
use crate::{
collator::{self as collator_util},
- collators::{check_validation_code_or_log, cores_scheduled_for_para},
+ collators::{
+ check_validation_code_or_log,
+ slot_based::{
+ core_selector,
+ relay_chain_data_cache::{RelayChainData, RelayChainDataCache},
+ },
+ },
LOG_TARGET,
};
@@ -218,7 +220,7 @@ where
collator_util::Collator::::new(params)
};
- let mut relay_chain_fetcher = RelayChainCachingFetcher::new(relay_client.clone(), para_id);
+ let mut relay_chain_data_cache = RelayChainDataCache::new(relay_client.clone(), para_id);
loop {
// We wait here until the next slot arrives.
@@ -242,7 +244,7 @@ where
// Retrieve the core selector.
let (core_selector, claim_queue_offset) =
- match core_selector(&*para_client, &parent).await {
+ match core_selector(&*para_client, parent.hash, *parent.header.number()) {
Ok(core_selector) => core_selector,
Err(err) => {
tracing::trace!(
@@ -259,7 +261,7 @@ where
max_pov_size,
scheduled_cores,
claimed_cores,
- }) = relay_chain_fetcher
+ }) = relay_chain_data_cache
.get_mut_relay_chain_data(relay_parent, claim_queue_offset)
.await
else {
@@ -419,119 +421,3 @@ where
}
}
}
-
-/// Contains relay chain data necessary for parachain block building.
-#[derive(Clone)]
-struct RelayChainData {
- /// Current relay chain parent header.
- pub relay_parent_header: RelayHeader,
- /// The cores on which the para is scheduled at the configured claim queue offset.
- pub scheduled_cores: Vec,
- /// Maximum configured PoV size on the relay chain.
- pub max_pov_size: u32,
- /// The claimed cores at a relay parent.
- pub claimed_cores: BTreeSet,
-}
-
-/// Simple helper to fetch relay chain data and cache it based on the current relay chain best block
-/// hash.
-struct RelayChainCachingFetcher {
- relay_client: RI,
- para_id: ParaId,
- last_data: Option<(RelayHash, RelayChainData)>,
-}
-
-impl RelayChainCachingFetcher
-where
- RI: RelayChainInterface + Clone + 'static,
-{
- pub fn new(relay_client: RI, para_id: ParaId) -> Self {
- Self { relay_client, para_id, last_data: None }
- }
-
- /// Fetch required [`RelayChainData`] from the relay chain.
- /// If this data has been fetched in the past for the incoming hash, it will reuse
- /// cached data.
- pub async fn get_mut_relay_chain_data(
- &mut self,
- relay_parent: RelayHash,
- claim_queue_offset: ClaimQueueOffset,
- ) -> Result<&mut RelayChainData, ()> {
- match &self.last_data {
- Some((last_seen_hash, _)) if *last_seen_hash == relay_parent => {
- tracing::trace!(target: crate::LOG_TARGET, %relay_parent, "Using cached data for relay parent.");
- Ok(&mut self.last_data.as_mut().expect("last_data is Some").1)
- },
- _ => {
- tracing::trace!(target: crate::LOG_TARGET, %relay_parent, "Relay chain best block changed, fetching new data from relay chain.");
- let data = self.update_for_relay_parent(relay_parent, claim_queue_offset).await?;
- self.last_data = Some((relay_parent, data));
- Ok(&mut self.last_data.as_mut().expect("last_data was just set above").1)
- },
- }
- }
-
- /// Fetch fresh data from the relay chain for the given relay parent hash.
- async fn update_for_relay_parent(
- &self,
- relay_parent: RelayHash,
- claim_queue_offset: ClaimQueueOffset,
- ) -> Result {
- let scheduled_cores = cores_scheduled_for_para(
- relay_parent,
- self.para_id,
- &self.relay_client,
- claim_queue_offset,
- )
- .await;
-
- let Ok(Some(relay_parent_header)) =
- self.relay_client.header(BlockId::Hash(relay_parent)).await
- else {
- tracing::warn!(target: crate::LOG_TARGET, "Unable to fetch latest relay chain block header.");
- return Err(())
- };
-
- let max_pov_size = match self
- .relay_client
- .persisted_validation_data(relay_parent, self.para_id, OccupiedCoreAssumption::Included)
- .await
- {
- Ok(None) => return Err(()),
- Ok(Some(pvd)) => pvd.max_pov_size,
- Err(err) => {
- tracing::error!(target: crate::LOG_TARGET, ?err, "Failed to gather information from relay-client");
- return Err(())
- },
- };
-
- Ok(RelayChainData {
- relay_parent_header,
- scheduled_cores,
- max_pov_size,
- claimed_cores: BTreeSet::new(),
- })
- }
-}
-
-async fn core_selector(
- para_client: &Client,
- parent: &consensus_common::PotentialParent,
-) -> Result<(CoreSelector, ClaimQueueOffset), sp_api::ApiError>
-where
- Client: ProvideRuntimeApi + Send + Sync,
- Client::Api: GetCoreSelectorApi,
-{
- let block_hash = parent.hash;
- let runtime_api = para_client.runtime_api();
-
- if runtime_api.has_api::>(block_hash)? {
- Ok(runtime_api.core_selector(block_hash)?)
- } else {
- let next_block_number: U256 = (*parent.header.number() + One::one()).into();
-
- // If the runtime API does not support the core selector API, fallback to some default
- // values.
- Ok((CoreSelector(next_block_number.byte(0)), ClaimQueueOffset(DEFAULT_CLAIM_QUEUE_OFFSET)))
- }
-}
diff --git a/cumulus/client/consensus/aura/src/collators/slot_based/block_import.rs b/cumulus/client/consensus/aura/src/collators/slot_based/block_import.rs
new file mode 100644
index 000000000000..9c53da6a6b7d
--- /dev/null
+++ b/cumulus/client/consensus/aura/src/collators/slot_based/block_import.rs
@@ -0,0 +1,144 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// This file is part of Cumulus.
+
+// Cumulus is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Cumulus is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Cumulus. If not, see .
+
+use futures::{stream::FusedStream, StreamExt};
+use sc_consensus::{BlockImport, StateAction};
+use sc_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender};
+use sp_api::{ApiExt, CallApiAt, CallContext, Core, ProvideRuntimeApi, StorageProof};
+use sp_runtime::traits::{Block as BlockT, Header as _};
+use sp_trie::proof_size_extension::ProofSizeExt;
+use std::sync::Arc;
+
+/// Handle for receiving the block and the storage proof from the [`SlotBasedBlockImport`].
+///
+/// This handle should be passed to [`Params`](super::Params) or can also be dropped if the node is
+/// not running as collator.
+pub struct SlotBasedBlockImportHandle {
+ receiver: TracingUnboundedReceiver<(Block, StorageProof)>,
+}
+
+impl SlotBasedBlockImportHandle {
+ /// Returns the next item.
+ ///
+ /// The future will never return when the internal channel is closed.
+ pub async fn next(&mut self) -> (Block, StorageProof) {
+ loop {
+ if self.receiver.is_terminated() {
+ futures::pending!()
+ } else if let Some(res) = self.receiver.next().await {
+ return res
+ }
+ }
+ }
+}
+
+/// Special block import for the slot based collator.
+pub struct SlotBasedBlockImport {
+ inner: BI,
+ client: Arc,
+ sender: TracingUnboundedSender<(Block, StorageProof)>,
+}
+
+impl SlotBasedBlockImport {
+ /// Create a new instance.
+ ///
+ /// The returned [`SlotBasedBlockImportHandle`] needs to be passed to the
+ /// [`Params`](super::Params), so that this block import instance can communicate with the
+ /// collation task. If the node is not running as a collator, just dropping the handle is fine.
+ pub fn new(inner: BI, client: Arc) -> (Self, SlotBasedBlockImportHandle) {
+ let (sender, receiver) = tracing_unbounded("SlotBasedBlockImportChannel", 1000);
+
+ (Self { sender, client, inner }, SlotBasedBlockImportHandle { receiver })
+ }
+}
+
+impl Clone for SlotBasedBlockImport {
+ fn clone(&self) -> Self {
+ Self { inner: self.inner.clone(), client: self.client.clone(), sender: self.sender.clone() }
+ }
+}
+
+#[async_trait::async_trait]
+impl BlockImport for SlotBasedBlockImport
+where
+ Block: BlockT,
+ BI: BlockImport + Send + Sync,
+ BI::Error: Into,
+ Client: ProvideRuntimeApi + CallApiAt + Send + Sync,
+ Client::StateBackend: Send,
+ Client::Api: Core,
+{
+ type Error = sp_consensus::Error;
+
+ async fn check_block(
+ &self,
+ block: sc_consensus::BlockCheckParams,
+ ) -> Result {
+ self.inner.check_block(block).await.map_err(Into::into)
+ }
+
+ async fn import_block(
+ &self,
+ mut params: sc_consensus::BlockImportParams,
+ ) -> Result {
+ // If the channel exists and it is required to execute the block, we will execute the block
+ // here. This is done to collect the storage proof and to prevent re-execution, we push
+ // downwards the state changes. `StateAction::ApplyChanges` is ignored, because it either
+ // means that the node produced the block itself or the block was imported via state sync.
+ if !self.sender.is_closed() && !matches!(params.state_action, StateAction::ApplyChanges(_))
+ {
+ let mut runtime_api = self.client.runtime_api();
+
+ runtime_api.set_call_context(CallContext::Onchain);
+
+ runtime_api.record_proof();
+ let recorder = runtime_api
+ .proof_recorder()
+ .expect("Proof recording is enabled in the line above; qed.");
+ runtime_api.register_extension(ProofSizeExt::new(recorder));
+
+ let parent_hash = *params.header.parent_hash();
+
+ let block = Block::new(params.header.clone(), params.body.clone().unwrap_or_default());
+
+ runtime_api
+ .execute_block(parent_hash, block.clone())
+ .map_err(|e| Box::new(e) as Box<_>)?;
+
+ let storage_proof =
+ runtime_api.extract_proof().expect("Proof recording was enabled above; qed");
+
+ let state = self.client.state_at(parent_hash).map_err(|e| Box::new(e) as Box<_>)?;
+ let gen_storage_changes = runtime_api
+ .into_storage_changes(&state, parent_hash)
+ .map_err(sp_consensus::Error::ChainLookup)?;
+
+ if params.header.state_root() != &gen_storage_changes.transaction_storage_root {
+ return Err(sp_consensus::Error::Other(Box::new(
+ sp_blockchain::Error::InvalidStateRoot,
+ )))
+ }
+
+ params.state_action = StateAction::ApplyChanges(sc_consensus::StorageChanges::Changes(
+ gen_storage_changes,
+ ));
+
+ let _ = self.sender.unbounded_send((block, storage_proof));
+ }
+
+ self.inner.import_block(params).await.map_err(Into::into)
+ }
+}
diff --git a/cumulus/client/consensus/aura/src/collators/slot_based/collation_task.rs b/cumulus/client/consensus/aura/src/collators/slot_based/collation_task.rs
index 5b8151f6302c..abaeb8319a40 100644
--- a/cumulus/client/consensus/aura/src/collators/slot_based/collation_task.rs
+++ b/cumulus/client/consensus/aura/src/collators/slot_based/collation_task.rs
@@ -47,6 +47,8 @@ pub struct Params {
pub collator_service: CS,
/// Receiver channel for communication with the block builder task.
pub collator_receiver: TracingUnboundedReceiver>,
+ /// The handle from the special slot based block import.
+ pub block_import_handle: super::SlotBasedBlockImportHandle,
}
/// Asynchronously executes the collation task for a parachain.
@@ -55,28 +57,49 @@ pub struct Params {
/// collations to the relay chain. It listens for new best relay chain block notifications and
/// handles collator messages. If our parachain is scheduled on a core and we have a candidate,
/// the task will build a collation and send it to the relay chain.
-pub async fn run_collation_task(mut params: Params)
-where
+pub async fn run_collation_task(
+ Params {
+ relay_client,
+ collator_key,
+ para_id,
+ reinitialize,
+ collator_service,
+ mut collator_receiver,
+ mut block_import_handle,
+ }: Params,
+) where
Block: BlockT,
CS: CollatorServiceInterface + Send + Sync + 'static,
RClient: RelayChainInterface + Clone + 'static,
{
- let Ok(mut overseer_handle) = params.relay_client.overseer_handle() else {
+ let Ok(mut overseer_handle) = relay_client.overseer_handle() else {
tracing::error!(target: LOG_TARGET, "Failed to get overseer handle.");
return
};
cumulus_client_collator::initialize_collator_subsystems(
&mut overseer_handle,
- params.collator_key,
- params.para_id,
- params.reinitialize,
+ collator_key,
+ para_id,
+ reinitialize,
)
.await;
- let collator_service = params.collator_service;
- while let Some(collator_message) = params.collator_receiver.next().await {
- handle_collation_message(collator_message, &collator_service, &mut overseer_handle).await;
+ loop {
+ futures::select! {
+ collator_message = collator_receiver.next() => {
+ let Some(message) = collator_message else {
+ return;
+ };
+
+ handle_collation_message(message, &collator_service, &mut overseer_handle).await;
+ },
+ block_import_msg = block_import_handle.next().fuse() => {
+ // TODO: Implement me.
+ // Issue: https://github.com/paritytech/polkadot-sdk/issues/6495
+ let _ = block_import_msg;
+ }
+ }
}
}
diff --git a/cumulus/client/consensus/aura/src/collators/slot_based/mod.rs b/cumulus/client/consensus/aura/src/collators/slot_based/mod.rs
index 18e63681d578..ab78b31fbd80 100644
--- a/cumulus/client/consensus/aura/src/collators/slot_based/mod.rs
+++ b/cumulus/client/consensus/aura/src/collators/slot_based/mod.rs
@@ -35,30 +35,35 @@ use cumulus_client_collator::service::ServiceInterface as CollatorServiceInterfa
use cumulus_client_consensus_common::{self as consensus_common, ParachainBlockImportMarker};
use cumulus_client_consensus_proposer::ProposerInterface;
use cumulus_primitives_aura::AuraUnincludedSegmentApi;
-use cumulus_primitives_core::GetCoreSelectorApi;
+use cumulus_primitives_core::{ClaimQueueOffset, CoreSelector, GetCoreSelectorApi};
use cumulus_relay_chain_interface::RelayChainInterface;
use futures::FutureExt;
use polkadot_primitives::{
- CollatorPair, CoreIndex, Hash as RelayHash, Id as ParaId, ValidationCodeHash,
+ vstaging::DEFAULT_CLAIM_QUEUE_OFFSET, CollatorPair, CoreIndex, Hash as RelayHash, Id as ParaId,
+ ValidationCodeHash,
};
use sc_client_api::{backend::AuxStore, BlockBackend, BlockOf, UsageProvider};
use sc_consensus::BlockImport;
use sc_utils::mpsc::tracing_unbounded;
-use sp_api::ProvideRuntimeApi;
+use sp_api::{ApiExt, ProvideRuntimeApi};
use sp_application_crypto::AppPublic;
use sp_blockchain::HeaderBackend;
use sp_consensus_aura::AuraApi;
-use sp_core::{crypto::Pair, traits::SpawnNamed};
+use sp_core::{crypto::Pair, traits::SpawnNamed, U256};
use sp_inherents::CreateInherentDataProviders;
use sp_keystore::KeystorePtr;
-use sp_runtime::traits::{Block as BlockT, Member};
+use sp_runtime::traits::{Block as BlockT, Member, NumberFor, One};
use std::{sync::Arc, time::Duration};
+pub use block_import::{SlotBasedBlockImport, SlotBasedBlockImportHandle};
+
mod block_builder_task;
+mod block_import;
mod collation_task;
+mod relay_chain_data_cache;
/// Parameters for [`run`].
-pub struct Params {
+pub struct Params {
/// Inherent data providers. Only non-consensus inherent data should be provided, i.e.
/// the timestamp, slot, and paras inherents should be omitted, as they are set by this
/// collator.
@@ -90,6 +95,8 @@ pub struct Params,
/// Spawner for spawning futures.
pub spawner: Spawner,
}
@@ -111,8 +118,9 @@ pub fn run,
+ }: Params,
) where
Block: BlockT,
Client: ProvideRuntimeApi
@@ -147,6 +155,7 @@ pub fn run(collator_task_params);
@@ -197,3 +206,26 @@ struct CollatorMessage {
/// Core index that this block should be submitted on
pub core_index: CoreIndex,
}
+
+/// Fetch the `CoreSelector` and `ClaimQueueOffset` for `parent_hash`.
+fn core_selector(
+ para_client: &Client,
+ parent_hash: Block::Hash,
+ parent_number: NumberFor,
+) -> Result<(CoreSelector, ClaimQueueOffset), sp_api::ApiError>
+where
+ Client: ProvideRuntimeApi + Send + Sync,
+ Client::Api: GetCoreSelectorApi,
+{
+ let runtime_api = para_client.runtime_api();
+
+ if runtime_api.has_api::>(parent_hash)? {
+ Ok(runtime_api.core_selector(parent_hash)?)
+ } else {
+ let next_block_number: U256 = (parent_number + One::one()).into();
+
+ // If the runtime API does not support the core selector API, fallback to some default
+ // values.
+ Ok((CoreSelector(next_block_number.byte(0)), ClaimQueueOffset(DEFAULT_CLAIM_QUEUE_OFFSET)))
+ }
+}
diff --git a/cumulus/client/consensus/aura/src/collators/slot_based/relay_chain_data_cache.rs b/cumulus/client/consensus/aura/src/collators/slot_based/relay_chain_data_cache.rs
new file mode 100644
index 000000000000..be30ec2f747d
--- /dev/null
+++ b/cumulus/client/consensus/aura/src/collators/slot_based/relay_chain_data_cache.rs
@@ -0,0 +1,127 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// This file is part of Cumulus.
+
+// Cumulus is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Cumulus is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Cumulus. If not, see .
+
+//! Utility for caching [`RelayChainData`] for different relay blocks.
+
+use crate::collators::cores_scheduled_for_para;
+use cumulus_primitives_core::ClaimQueueOffset;
+use cumulus_relay_chain_interface::RelayChainInterface;
+use polkadot_primitives::{
+ CoreIndex, Hash as RelayHash, Header as RelayHeader, Id as ParaId, OccupiedCoreAssumption,
+};
+use sp_runtime::generic::BlockId;
+use std::collections::BTreeSet;
+
+/// Contains relay chain data necessary for parachain block building.
+#[derive(Clone)]
+pub struct RelayChainData {
+ /// Current relay chain parent header.
+ pub relay_parent_header: RelayHeader,
+ /// The cores on which the para is scheduled at the configured claim queue offset.
+ pub scheduled_cores: Vec,
+ /// Maximum configured PoV size on the relay chain.
+ pub max_pov_size: u32,
+ /// The claimed cores at a relay parent.
+ pub claimed_cores: BTreeSet,
+}
+
+/// Simple helper to fetch relay chain data and cache it based on the current relay chain best block
+/// hash.
+pub struct RelayChainDataCache {
+ relay_client: RI,
+ para_id: ParaId,
+ cached_data: schnellru::LruMap,
+}
+
+impl RelayChainDataCache
+where
+ RI: RelayChainInterface + Clone + 'static,
+{
+ pub fn new(relay_client: RI, para_id: ParaId) -> Self {
+ Self {
+ relay_client,
+ para_id,
+ // 50 cached relay chain blocks should be more than enough.
+ cached_data: schnellru::LruMap::new(schnellru::ByLength::new(50)),
+ }
+ }
+
+ /// Fetch required [`RelayChainData`] from the relay chain.
+ /// If this data has been fetched in the past for the incoming hash, it will reuse
+ /// cached data.
+ pub async fn get_mut_relay_chain_data(
+ &mut self,
+ relay_parent: RelayHash,
+ claim_queue_offset: ClaimQueueOffset,
+ ) -> Result<&mut RelayChainData, ()> {
+ let insert_data = if self.cached_data.peek(&relay_parent).is_some() {
+ tracing::trace!(target: crate::LOG_TARGET, %relay_parent, "Using cached data for relay parent.");
+ None
+ } else {
+ tracing::trace!(target: crate::LOG_TARGET, %relay_parent, "Relay chain best block changed, fetching new data from relay chain.");
+ Some(self.update_for_relay_parent(relay_parent, claim_queue_offset).await?)
+ };
+
+ Ok(self
+ .cached_data
+ .get_or_insert(relay_parent, || {
+ insert_data.expect("`insert_data` exists if not cached yet; qed")
+ })
+ .expect("There is space for at least one element; qed"))
+ }
+
+ /// Fetch fresh data from the relay chain for the given relay parent hash.
+ async fn update_for_relay_parent(
+ &self,
+ relay_parent: RelayHash,
+ claim_queue_offset: ClaimQueueOffset,
+ ) -> Result {
+ let scheduled_cores = cores_scheduled_for_para(
+ relay_parent,
+ self.para_id,
+ &self.relay_client,
+ claim_queue_offset,
+ )
+ .await;
+
+ let Ok(Some(relay_parent_header)) =
+ self.relay_client.header(BlockId::Hash(relay_parent)).await
+ else {
+ tracing::warn!(target: crate::LOG_TARGET, "Unable to fetch latest relay chain block header.");
+ return Err(())
+ };
+
+ let max_pov_size = match self
+ .relay_client
+ .persisted_validation_data(relay_parent, self.para_id, OccupiedCoreAssumption::Included)
+ .await
+ {
+ Ok(None) => return Err(()),
+ Ok(Some(pvd)) => pvd.max_pov_size,
+ Err(err) => {
+ tracing::error!(target: crate::LOG_TARGET, ?err, "Failed to gather information from relay-client");
+ return Err(())
+ },
+ };
+
+ Ok(RelayChainData {
+ relay_parent_header,
+ scheduled_cores,
+ max_pov_size,
+ claimed_cores: BTreeSet::new(),
+ })
+ }
+}
diff --git a/cumulus/client/consensus/common/Cargo.toml b/cumulus/client/consensus/common/Cargo.toml
index 4bc2f1d1e600..0f532a2101c4 100644
--- a/cumulus/client/consensus/common/Cargo.toml
+++ b/cumulus/client/consensus/common/Cargo.toml
@@ -5,6 +5,8 @@ version = "0.7.0"
authors.workspace = true
edition.workspace = true
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/consensus/proposer/Cargo.toml b/cumulus/client/consensus/proposer/Cargo.toml
index bb760ae03f4d..e391481bc445 100644
--- a/cumulus/client/consensus/proposer/Cargo.toml
+++ b/cumulus/client/consensus/proposer/Cargo.toml
@@ -5,6 +5,8 @@ version = "0.7.0"
authors.workspace = true
edition.workspace = true
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/consensus/relay-chain/Cargo.toml b/cumulus/client/consensus/relay-chain/Cargo.toml
index f3ee6fc2f7d2..7f0f4333c961 100644
--- a/cumulus/client/consensus/relay-chain/Cargo.toml
+++ b/cumulus/client/consensus/relay-chain/Cargo.toml
@@ -5,6 +5,8 @@ version = "0.7.0"
authors.workspace = true
edition.workspace = true
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/network/Cargo.toml b/cumulus/client/network/Cargo.toml
index bc67678eedeb..b78df8d73eae 100644
--- a/cumulus/client/network/Cargo.toml
+++ b/cumulus/client/network/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
description = "Cumulus-specific networking protocol"
edition.workspace = true
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/parachain-inherent/Cargo.toml b/cumulus/client/parachain-inherent/Cargo.toml
index 0d82cf648743..4f53e2bc1bc2 100644
--- a/cumulus/client/parachain-inherent/Cargo.toml
+++ b/cumulus/client/parachain-inherent/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Inherent that needs to be present in every parachain block. Contains messages and a relay chain storage-proof."
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[dependencies]
async-trait = { workspace = true }
diff --git a/cumulus/client/parachain-inherent/src/mock.rs b/cumulus/client/parachain-inherent/src/mock.rs
index 950cba2aaa7d..e08aca932564 100644
--- a/cumulus/client/parachain-inherent/src/mock.rs
+++ b/cumulus/client/parachain-inherent/src/mock.rs
@@ -17,17 +17,17 @@
use crate::{ParachainInherentData, INHERENT_IDENTIFIER};
use codec::Decode;
use cumulus_primitives_core::{
- relay_chain, InboundDownwardMessage, InboundHrmpMessage, ParaId, PersistedValidationData,
+ relay_chain, relay_chain::UpgradeGoAhead, InboundDownwardMessage, InboundHrmpMessage, ParaId,
+ PersistedValidationData,
};
use cumulus_primitives_parachain_inherent::MessageQueueChain;
+use cumulus_test_relay_sproof_builder::RelayStateSproofBuilder;
use sc_client_api::{Backend, StorageProvider};
use sp_crypto_hashing::twox_128;
use sp_inherents::{InherentData, InherentDataProvider};
use sp_runtime::traits::Block;
use std::collections::BTreeMap;
-use cumulus_test_relay_sproof_builder::RelayStateSproofBuilder;
-
/// Relay chain slot duration, in milliseconds.
pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000;
@@ -68,10 +68,12 @@ pub struct MockValidationDataInherentDataProvider {
pub xcm_config: MockXcmConfig,
/// Inbound downward XCM messages to be injected into the block.
pub raw_downward_messages: Vec>,
- // Inbound Horizontal messages sorted by channel.
+ /// Inbound Horizontal messages sorted by channel.
pub raw_horizontal_messages: Vec<(ParaId, Vec)>,
- // Additional key-value pairs that should be injected.
+ /// Additional key-value pairs that should be injected.
pub additional_key_values: Option, Vec)>>,
+ /// Whether upgrade go ahead should be set.
+ pub upgrade_go_ahead: Option,
}
/// Something that can generate randomness.
@@ -176,6 +178,7 @@ impl> InherentDataProvider
sproof_builder.current_slot =
((relay_parent_number / RELAY_CHAIN_SLOT_DURATION_MILLIS) as u64).into();
+ sproof_builder.upgrade_go_ahead = self.upgrade_go_ahead;
// Process the downward messages and set up the correct head
let mut downward_messages = Vec::new();
let mut dmq_mqc = MessageQueueChain::new(self.xcm_config.starting_dmq_mqc_head);
diff --git a/cumulus/client/pov-recovery/Cargo.toml b/cumulus/client/pov-recovery/Cargo.toml
index 3127dd26fcaa..762837e0bb11 100644
--- a/cumulus/client/pov-recovery/Cargo.toml
+++ b/cumulus/client/pov-recovery/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
description = "Parachain PoV recovery"
edition.workspace = true
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/relay-chain-inprocess-interface/Cargo.toml b/cumulus/client/relay-chain-inprocess-interface/Cargo.toml
index 6f1b74191be7..9e6e8da929bb 100644
--- a/cumulus/client/relay-chain-inprocess-interface/Cargo.toml
+++ b/cumulus/client/relay-chain-inprocess-interface/Cargo.toml
@@ -5,6 +5,8 @@ version = "0.7.0"
edition.workspace = true
description = "Implementation of the RelayChainInterface trait for Polkadot full-nodes."
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/relay-chain-interface/Cargo.toml b/cumulus/client/relay-chain-interface/Cargo.toml
index a496fab050dd..2b9e72bbeca6 100644
--- a/cumulus/client/relay-chain-interface/Cargo.toml
+++ b/cumulus/client/relay-chain-interface/Cargo.toml
@@ -5,6 +5,8 @@ version = "0.7.0"
edition.workspace = true
description = "Common interface for different relay chain datasources."
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/relay-chain-minimal-node/Cargo.toml b/cumulus/client/relay-chain-minimal-node/Cargo.toml
index 95ecadc8bd06..0fad188bb1ab 100644
--- a/cumulus/client/relay-chain-minimal-node/Cargo.toml
+++ b/cumulus/client/relay-chain-minimal-node/Cargo.toml
@@ -5,6 +5,8 @@ version = "0.7.0"
edition.workspace = true
description = "Minimal node implementation to be used in tandem with RPC or light-client mode."
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/relay-chain-rpc-interface/Cargo.toml b/cumulus/client/relay-chain-rpc-interface/Cargo.toml
index fb4cb4ceed4e..162f5ad0e9e8 100644
--- a/cumulus/client/relay-chain-rpc-interface/Cargo.toml
+++ b/cumulus/client/relay-chain-rpc-interface/Cargo.toml
@@ -5,6 +5,8 @@ version = "0.7.0"
edition.workspace = true
description = "Implementation of the RelayChainInterface trait that connects to a remote RPC-node."
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/client/service/Cargo.toml b/cumulus/client/service/Cargo.toml
index 0a77b465d96a..193283648f19 100644
--- a/cumulus/client/service/Cargo.toml
+++ b/cumulus/client/service/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Common functions used to assemble the components of a parachain node."
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/pallets/aura-ext/Cargo.toml b/cumulus/pallets/aura-ext/Cargo.toml
index c08148928b7c..fcda79f1d5c1 100644
--- a/cumulus/pallets/aura-ext/Cargo.toml
+++ b/cumulus/pallets/aura-ext/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "AURA consensus extension pallet for parachains"
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/pallets/dmp-queue/Cargo.toml b/cumulus/pallets/dmp-queue/Cargo.toml
index 936526290d93..ae85a108fe72 100644
--- a/cumulus/pallets/dmp-queue/Cargo.toml
+++ b/cumulus/pallets/dmp-queue/Cargo.toml
@@ -56,6 +56,7 @@ runtime-benchmarks = [
"frame-support/runtime-benchmarks",
"frame-system/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
try-runtime = [
diff --git a/cumulus/pallets/parachain-system/Cargo.toml b/cumulus/pallets/parachain-system/Cargo.toml
index 3cb0394c4b95..c911f8531da2 100644
--- a/cumulus/pallets/parachain-system/Cargo.toml
+++ b/cumulus/pallets/parachain-system/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Base pallet for cumulus-based parachains"
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
@@ -36,7 +38,6 @@ sp-version = { workspace = true }
# Polkadot
polkadot-parachain-primitives = { features = ["wasm-api"], workspace = true }
polkadot-runtime-parachains = { workspace = true }
-polkadot-runtime-common = { optional = true, workspace = true }
xcm = { workspace = true }
xcm-builder = { workspace = true }
@@ -82,7 +83,6 @@ std = [
"log/std",
"pallet-message-queue/std",
"polkadot-parachain-primitives/std",
- "polkadot-runtime-common/std",
"polkadot-runtime-parachains/std",
"scale-info/std",
"sp-core/std",
@@ -107,17 +107,16 @@ runtime-benchmarks = [
"frame-system/runtime-benchmarks",
"pallet-message-queue/runtime-benchmarks",
"polkadot-parachain-primitives/runtime-benchmarks",
- "polkadot-runtime-common/runtime-benchmarks",
"polkadot-runtime-parachains/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
try-runtime = [
"frame-support/try-runtime",
"frame-system/try-runtime",
"pallet-message-queue/try-runtime",
- "polkadot-runtime-common?/try-runtime",
"polkadot-runtime-parachains/try-runtime",
"sp-runtime/try-runtime",
]
diff --git a/cumulus/pallets/parachain-system/proc-macro/Cargo.toml b/cumulus/pallets/parachain-system/proc-macro/Cargo.toml
index da6f0fd03efb..629818f9c4cc 100644
--- a/cumulus/pallets/parachain-system/proc-macro/Cargo.toml
+++ b/cumulus/pallets/parachain-system/proc-macro/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Proc macros provided by the parachain-system pallet"
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/pallets/parachain-system/src/lib.rs b/cumulus/pallets/parachain-system/src/lib.rs
index 39fc8321a072..0fa759357f65 100644
--- a/cumulus/pallets/parachain-system/src/lib.rs
+++ b/cumulus/pallets/parachain-system/src/lib.rs
@@ -1636,7 +1636,7 @@ impl InspectMessageQueues for Pallet {
}
#[cfg(feature = "runtime-benchmarks")]
-impl polkadot_runtime_common::xcm_sender::EnsureForParachain for Pallet {
+impl polkadot_runtime_parachains::EnsureForParachain for Pallet {
fn ensure(para_id: ParaId) {
if let ChannelStatus::Closed = Self::get_channel_status(para_id) {
Self::open_outbound_hrmp_channel_for_benchmarks_or_tests(para_id)
diff --git a/cumulus/pallets/solo-to-para/Cargo.toml b/cumulus/pallets/solo-to-para/Cargo.toml
index 5fd1939e93a0..2088361bf11a 100644
--- a/cumulus/pallets/solo-to-para/Cargo.toml
+++ b/cumulus/pallets/solo-to-para/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Adds functionality to migrate from a Solo to a Parachain"
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/pallets/xcm/Cargo.toml b/cumulus/pallets/xcm/Cargo.toml
index 35d7a083b061..ff9be866d48f 100644
--- a/cumulus/pallets/xcm/Cargo.toml
+++ b/cumulus/pallets/xcm/Cargo.toml
@@ -5,6 +5,8 @@ name = "cumulus-pallet-xcm"
version = "0.7.0"
license = "Apache-2.0"
description = "Pallet for stuff specific to parachains' usage of XCM"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/pallets/xcmp-queue/Cargo.toml b/cumulus/pallets/xcmp-queue/Cargo.toml
index cb33b8232ab2..7046aea647ac 100644
--- a/cumulus/pallets/xcmp-queue/Cargo.toml
+++ b/cumulus/pallets/xcmp-queue/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Pallet to queue outbound and inbound XCMP messages."
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
@@ -85,6 +87,7 @@ runtime-benchmarks = [
"sp-runtime/runtime-benchmarks",
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
try-runtime = [
"cumulus-pallet-parachain-system/try-runtime",
diff --git a/cumulus/parachains/chain-specs/asset-hub-kusama.json b/cumulus/parachains/chain-specs/asset-hub-kusama.json
index 58b8ac019227..ae4409e4f44f 100644
--- a/cumulus/parachains/chain-specs/asset-hub-kusama.json
+++ b/cumulus/parachains/chain-specs/asset-hub-kusama.json
@@ -28,7 +28,8 @@
"/dns/mine14.rotko.net/tcp/35524/wss/p2p/12D3KooWJUFnjR2PNbsJhudwPVaWCoZy1acPGKjM2cSuGj345BBu",
"/dns/asset-hub-kusama.bootnodes.polkadotters.com/tcp/30511/p2p/12D3KooWDpk7wVH7RgjErEvbvAZ2kY5VeaAwRJP5ojmn1e8b8UbU",
"/dns/asset-hub-kusama.bootnodes.polkadotters.com/tcp/30513/wss/p2p/12D3KooWDpk7wVH7RgjErEvbvAZ2kY5VeaAwRJP5ojmn1e8b8UbU",
- "/dns/boot-kusama-assethub.luckyfriday.io/tcp/443/wss/p2p/12D3KooWSwaeFs6FNgpgh54fdoxSDAA4nJNaPE3PAcse2GRrG7b3"
+ "/dns/boot-kusama-assethub.luckyfriday.io/tcp/443/wss/p2p/12D3KooWSwaeFs6FNgpgh54fdoxSDAA4nJNaPE3PAcse2GRrG7b3",
+ "/dns/asset-hub-kusama-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWNCg821LyWDVrAJ2mG6ScDeeBFuDPiJtLYc9jCGNCyMoq"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/asset-hub-polkadot.json b/cumulus/parachains/chain-specs/asset-hub-polkadot.json
index 3e46501b0078..62efb924c171 100644
--- a/cumulus/parachains/chain-specs/asset-hub-polkadot.json
+++ b/cumulus/parachains/chain-specs/asset-hub-polkadot.json
@@ -28,7 +28,8 @@
"/dns/mint14.rotko.net/tcp/35514/wss/p2p/12D3KooWKkzLjYF6M5eEs7nYiqEtRqY8SGVouoCwo3nCWsRnThDW",
"/dns/asset-hub-polkadot.bootnodes.polkadotters.com/tcp/30508/p2p/12D3KooWKbfY9a9oywxMJKiALmt7yhrdQkjXMtvxhhDDN23vG93R",
"/dns/asset-hub-polkadot.bootnodes.polkadotters.com/tcp/30510/wss/p2p/12D3KooWKbfY9a9oywxMJKiALmt7yhrdQkjXMtvxhhDDN23vG93R",
- "/dns/boot-polkadot-assethub.luckyfriday.io/tcp/443/wss/p2p/12D3KooWDR9M7CjV1xdjCRbRwkFn1E7sjMaL4oYxGyDWxuLrFc2J"
+ "/dns/boot-polkadot-assethub.luckyfriday.io/tcp/443/wss/p2p/12D3KooWDR9M7CjV1xdjCRbRwkFn1E7sjMaL4oYxGyDWxuLrFc2J",
+ "/dns/asset-hub-polkadot-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWJUhizuk3crSvpyKLGycHBtnP93rwjksVueveU6x6k6RY"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/asset-hub-westend.json b/cumulus/parachains/chain-specs/asset-hub-westend.json
index 42717974a0b3..67a208c2787b 100644
--- a/cumulus/parachains/chain-specs/asset-hub-westend.json
+++ b/cumulus/parachains/chain-specs/asset-hub-westend.json
@@ -29,7 +29,8 @@
"/dns/wmint14.rotko.net/tcp/34534/ws/p2p/12D3KooWE4UDXqgtTcMCyUQ8S4uvaT8VMzzTBA6NWmKuYwTacWuN",
"/dns/wmint14.rotko.net/tcp/35534/wss/p2p/12D3KooWE4UDXqgtTcMCyUQ8S4uvaT8VMzzTBA6NWmKuYwTacWuN",
"/dns/asset-hub-westend.bootnodes.polkadotters.com/tcp/30514/p2p/12D3KooWNFYysCqmojxqjjaTfD2VkWBNngfyUKWjcR4WFixfHNTk",
- "/dns/asset-hub-westend.bootnodes.polkadotters.com/tcp/30516/wss/p2p/12D3KooWNFYysCqmojxqjjaTfD2VkWBNngfyUKWjcR4WFixfHNTk"
+ "/dns/asset-hub-westend.bootnodes.polkadotters.com/tcp/30516/wss/p2p/12D3KooWNFYysCqmojxqjjaTfD2VkWBNngfyUKWjcR4WFixfHNTk",
+ "/dns/asset-hub-westend-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWDUPyF2q8b6fVFEuwxBbRV3coAy1kzuCPU3D9TRiLnUfE"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/bridge-hub-kusama.json b/cumulus/parachains/chain-specs/bridge-hub-kusama.json
index 36558b325bbf..83910965584f 100644
--- a/cumulus/parachains/chain-specs/bridge-hub-kusama.json
+++ b/cumulus/parachains/chain-specs/bridge-hub-kusama.json
@@ -28,7 +28,8 @@
"/dns/kbr13.rotko.net/tcp/35553/wss/p2p/12D3KooWAmBp54mUEYtvsk2kxNEsDbAvdUMcaghxKXgUQxmPEQ66",
"/dns/bridge-hub-kusama.bootnodes.polkadotters.com/tcp/30520/p2p/12D3KooWH3pucezRRS5esoYyzZsUkKWcPSByQxEvmM819QL1HPLV",
"/dns/bridge-hub-kusama.bootnodes.polkadotters.com/tcp/30522/wss/p2p/12D3KooWH3pucezRRS5esoYyzZsUkKWcPSByQxEvmM819QL1HPLV",
- "/dns/boot-kusama-bridgehub.luckyfriday.io/tcp/443/wss/p2p/12D3KooWQybw6AFmAvrFfwUQnNxUpS12RovapD6oorh2mAJr4xyd"
+ "/dns/boot-kusama-bridgehub.luckyfriday.io/tcp/443/wss/p2p/12D3KooWQybw6AFmAvrFfwUQnNxUpS12RovapD6oorh2mAJr4xyd",
+ "/dns/bridge-hub-kusama-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWBE1ZhrYqMC3ECFK6qbufS9kgKuF57XpvvZU6LKsPUSnF"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/bridge-hub-polkadot.json b/cumulus/parachains/chain-specs/bridge-hub-polkadot.json
index eb22e09035f3..30585efaf4f1 100644
--- a/cumulus/parachains/chain-specs/bridge-hub-polkadot.json
+++ b/cumulus/parachains/chain-specs/bridge-hub-polkadot.json
@@ -28,7 +28,8 @@
"/dns/bridge-hub-polkadot.bootnodes.polkadotters.com/tcp/30519/wss/p2p/12D3KooWLUNE3LHPDa1WrrZaYT7ArK66CLM1bPv7kKz74UcLnQRB",
"/dns/boot-polkadot-bridgehub.luckyfriday.io/tcp/443/wss/p2p/12D3KooWKf3mBXHjLbwtPqv1BdbQuwbFNcQQYxASS7iQ25264AXH",
"/dns/bridge-hub-polkadot.bootnode.amforc.com/tcp/29999/wss/p2p/12D3KooWGT5E56rAHfT5dY1pMLTrpAgV72yfDtD1Y5tPCHaTsifp",
- "/dns/bridge-hub-polkadot.bootnode.amforc.com/tcp/30010/p2p/12D3KooWGT5E56rAHfT5dY1pMLTrpAgV72yfDtD1Y5tPCHaTsifp"
+ "/dns/bridge-hub-polkadot.bootnode.amforc.com/tcp/30010/p2p/12D3KooWGT5E56rAHfT5dY1pMLTrpAgV72yfDtD1Y5tPCHaTsifp",
+ "/dns/bridge-hub-polkadot-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWSBpo6fYU8CUr4fwA14CKSDUSj5jSgZzQDBNL1B8Dnmaw"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/bridge-hub-westend.json b/cumulus/parachains/chain-specs/bridge-hub-westend.json
index 40c7c7460c23..05d679a3e23f 100644
--- a/cumulus/parachains/chain-specs/bridge-hub-westend.json
+++ b/cumulus/parachains/chain-specs/bridge-hub-westend.json
@@ -29,7 +29,8 @@
"/dns/bridge-hub-westend.bootnodes.polkadotters.com/tcp/30523/p2p/12D3KooWPkwgJofp4GeeRwNgXqkp2aFwdLkCWv3qodpBJLwK43Jj",
"/dns/bridge-hub-westend.bootnodes.polkadotters.com/tcp/30525/wss/p2p/12D3KooWPkwgJofp4GeeRwNgXqkp2aFwdLkCWv3qodpBJLwK43Jj",
"/dns/bridge-hub-westend.bootnode.amforc.com/tcp/29999/wss/p2p/12D3KooWDSWod2gMtHxunXot538oEMw9p42pnPrpRELdsfYyT8R6",
- "/dns/bridge-hub-westend.bootnode.amforc.com/tcp/30007/p2p/12D3KooWDSWod2gMtHxunXot538oEMw9p42pnPrpRELdsfYyT8R6"
+ "/dns/bridge-hub-westend.bootnode.amforc.com/tcp/30007/p2p/12D3KooWDSWod2gMtHxunXot538oEMw9p42pnPrpRELdsfYyT8R6",
+ "/dns/bridge-hub-westend-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWJEfDZxrEKehoPbW2Mfg6rypttMXCMgMiybmapKqcByc1"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/collectives-polkadot.json b/cumulus/parachains/chain-specs/collectives-polkadot.json
index 5ccccbec9053..458530baf336 100644
--- a/cumulus/parachains/chain-specs/collectives-polkadot.json
+++ b/cumulus/parachains/chain-specs/collectives-polkadot.json
@@ -27,7 +27,8 @@
"/dns/pch16.rotko.net/tcp/35576/wss/p2p/12D3KooWKrm3XmuGzJH17Wcn4HRDGsEjLZGDgN77q3ZhwnnQP7y1",
"/dns/collectives-polkadot.bootnodes.polkadotters.com/tcp/30526/p2p/12D3KooWNohUjvJtGKUa8Vhy8C1ZBB5N8JATB6e7rdLVCioeb3ff",
"/dns/collectives-polkadot.bootnodes.polkadotters.com/tcp/30528/wss/p2p/12D3KooWNohUjvJtGKUa8Vhy8C1ZBB5N8JATB6e7rdLVCioeb3ff",
- "/dns/boot-polkadot-collectives.luckyfriday.io/tcp/443/wss/p2p/12D3KooWCzifnPooTt4kvTnXT7FTKTymVL7xn7DURQLsS2AKpf6w"
+ "/dns/boot-polkadot-collectives.luckyfriday.io/tcp/443/wss/p2p/12D3KooWCzifnPooTt4kvTnXT7FTKTymVL7xn7DURQLsS2AKpf6w",
+ "/dns/collectives-polkadot-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWNscpobBzjPEdjbbjjKRYh9j1whYJvagRJwb9UH68zCPC"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/collectives-westend.json b/cumulus/parachains/chain-specs/collectives-westend.json
index f583eddcef1f..aa0204df1a06 100644
--- a/cumulus/parachains/chain-specs/collectives-westend.json
+++ b/cumulus/parachains/chain-specs/collectives-westend.json
@@ -29,7 +29,8 @@
"/dns/wch13.rotko.net/tcp/34593/ws/p2p/12D3KooWPG85zhuSRoyptjLkFD4iJFistjiBmc15JgQ96B4fdXYr",
"/dns/wch13.rotko.net/tcp/35593/wss/p2p/12D3KooWPG85zhuSRoyptjLkFD4iJFistjiBmc15JgQ96B4fdXYr",
"/dns/collectives-westend.bootnodes.polkadotters.com/tcp/30529/p2p/12D3KooWAFkXNSBfyPduZVgfS7pj5NuVpbU8Ee5gHeF8wvos7Yqn",
- "/dns/collectives-westend.bootnodes.polkadotters.com/tcp/30531/wss/p2p/12D3KooWAFkXNSBfyPduZVgfS7pj5NuVpbU8Ee5gHeF8wvos7Yqn"
+ "/dns/collectives-westend.bootnodes.polkadotters.com/tcp/30531/wss/p2p/12D3KooWAFkXNSBfyPduZVgfS7pj5NuVpbU8Ee5gHeF8wvos7Yqn",
+ "/dns/collectives-westend-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWFH7UZnWESzuRSgrLvNSfALjtpr9PmG7QGyRNCizWEHcd"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/coretime-kusama.json b/cumulus/parachains/chain-specs/coretime-kusama.json
index 3e4ffae403bd..8352588a1e4b 100644
--- a/cumulus/parachains/chain-specs/coretime-kusama.json
+++ b/cumulus/parachains/chain-specs/coretime-kusama.json
@@ -26,7 +26,8 @@
"/dns/coretime-kusama-bootnode.radiumblock.com/tcp/30333/p2p/12D3KooWFzW9AgxNfkVNCepVByS7URDCRDAA5p3XzBLVptqZvWoL",
"/dns/coretime-kusama-bootnode.radiumblock.com/tcp/30336/wss/p2p/12D3KooWFzW9AgxNfkVNCepVByS7URDCRDAA5p3XzBLVptqZvWoL",
"/dns/coretime-kusama.bootnode.amforc.com/tcp/29999/wss/p2p/12D3KooWPrgxrrumrANp6Bp2SMEwMQHPHDbPzA1HbcrakZrbFi5P",
- "/dns/coretime-kusama.bootnode.amforc.com/tcp/30013/p2p/12D3KooWPrgxrrumrANp6Bp2SMEwMQHPHDbPzA1HbcrakZrbFi5P"
+ "/dns/coretime-kusama.bootnode.amforc.com/tcp/30013/p2p/12D3KooWPrgxrrumrANp6Bp2SMEwMQHPHDbPzA1HbcrakZrbFi5P",
+ "/dns/coretime-kusama-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWMPc6jEjzFLRCK7QgbcNh3gvxCzGvDKhU4F66QWf2kZmq"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/coretime-polkadot.json b/cumulus/parachains/chain-specs/coretime-polkadot.json
index e4f947d2afc9..7c12ee155b41 100644
--- a/cumulus/parachains/chain-specs/coretime-polkadot.json
+++ b/cumulus/parachains/chain-specs/coretime-polkadot.json
@@ -12,7 +12,8 @@
"/dns/coretime-polkadot-boot-ng.dwellir.com/tcp/443/wss/p2p/12D3KooWGpmytHjdthrkKgkXDZyKm9ABtJ2PtGk9NStJDG4pChy9",
"/dns/coretime-polkadot-boot-ng.dwellir.com/tcp/30361/p2p/12D3KooWGpmytHjdthrkKgkXDZyKm9ABtJ2PtGk9NStJDG4pChy9",
"/dns/coretime-polkadot-bootnode.radiumblock.com/tcp/30333/p2p/12D3KooWFsQphSqvqjVyKcEdR1D7LPcXHqjmy6ASuJrTr5isk9JU",
- "/dns/coretime-polkadot-bootnode.radiumblock.com/tcp/30336/wss/p2p/12D3KooWFsQphSqvqjVyKcEdR1D7LPcXHqjmy6ASuJrTr5isk9JU"
+ "/dns/coretime-polkadot-bootnode.radiumblock.com/tcp/30336/wss/p2p/12D3KooWFsQphSqvqjVyKcEdR1D7LPcXHqjmy6ASuJrTr5isk9JU",
+ "/dns/coretime-polkadot-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWFG9WQQTf3MX3YQypZjJtoJM5zCQgJcqYdxxTStsbhZGU"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/coretime-westend.json b/cumulus/parachains/chain-specs/coretime-westend.json
index 42f67526c29a..de6923bd7669 100644
--- a/cumulus/parachains/chain-specs/coretime-westend.json
+++ b/cumulus/parachains/chain-specs/coretime-westend.json
@@ -30,7 +30,8 @@
"/dns/coretime-westend.bootnodes.polkadotters.com/tcp/30358/wss/p2p/12D3KooWDc9T2vQ8rHvX7hAt9eLWktD9Q89NDTcLm5STkuNbzUGf",
"/dns/coretime-westend.bootnodes.polkadotters.com/tcp/30356/p2p/12D3KooWDc9T2vQ8rHvX7hAt9eLWktD9Q89NDTcLm5STkuNbzUGf",
"/dns/coretime-westend.bootnode.amforc.com/tcp/29999/wss/p2p/12D3KooWG9a9H9An96E3kgXL1sirHta117iuacJXnJRaUywkMiSd",
- "/dns/coretime-westend.bootnode.amforc.com/tcp/30013/p2p/12D3KooWG9a9H9An96E3kgXL1sirHta117iuacJXnJRaUywkMiSd"
+ "/dns/coretime-westend.bootnode.amforc.com/tcp/30013/p2p/12D3KooWG9a9H9An96E3kgXL1sirHta117iuacJXnJRaUywkMiSd",
+ "/dns/coretime-westend-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWCFNzjaiq45ZpW2qStmQdG5w7ZHrmi3RWUeG8cV2pPc2Y"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/people-kusama.json b/cumulus/parachains/chain-specs/people-kusama.json
index 300b9fcfb183..701e6e7dc1ec 100644
--- a/cumulus/parachains/chain-specs/people-kusama.json
+++ b/cumulus/parachains/chain-specs/people-kusama.json
@@ -28,7 +28,8 @@
"/dns/ibp-boot-kusama-people.luckyfriday.io/tcp/30342/p2p/12D3KooWM4bRafMH2StfBEQtyj5cMWfGLYbuikCZmvKv9m1MQVPn",
"/dns/ibp-boot-kusama-people.luckyfriday.io/tcp/443/wss/p2p/12D3KooWM4bRafMH2StfBEQtyj5cMWfGLYbuikCZmvKv9m1MQVPn",
"/dns4/people-kusama.boot.stake.plus/tcp/30332/wss/p2p/12D3KooWRuKr3ogzXwD8zE2CTWenGdy8vSfViAjYMwGiwvFCsz8n",
- "/dns/people-kusama.boot.stake.plus/tcp/31332/wss/p2p/12D3KooWFkDKdFxBJFyj9zumuJ4Mmctec2GqdYHcKYq8MTVe8dxf"
+ "/dns/people-kusama.boot.stake.plus/tcp/31332/wss/p2p/12D3KooWFkDKdFxBJFyj9zumuJ4Mmctec2GqdYHcKYq8MTVe8dxf",
+ "/dns/people-kusama-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWN32MmhPgZN8e1Dmc8DzEUKsfC2hga3Lqekko4VWvrbhq"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/people-polkadot.json b/cumulus/parachains/chain-specs/people-polkadot.json
index 083c0fbf44a4..ff8d57b9284d 100644
--- a/cumulus/parachains/chain-specs/people-polkadot.json
+++ b/cumulus/parachains/chain-specs/people-polkadot.json
@@ -8,7 +8,8 @@
"/dns/polkadot-people-connect-0.polkadot.io/tcp/443/wss/p2p/12D3KooWP7BoJ7nAF9QnsreN8Eft1yHNUhvhxFiQyKFEUePi9mu3",
"/dns/polkadot-people-connect-1.polkadot.io/tcp/443/wss/p2p/12D3KooWSSfWY3fTGJvGkuNUNBSNVCdLLNJnwkZSNQt7GCRYXu4o",
"/dns/people-polkadot-boot-ng.dwellir.com/tcp/443/wss/p2p/12D3KooWKMYu1L28TkDf1ooMW8D8PHcztLnjV3bausH9eiVTRUYN",
- "/dns/people-polkadot-boot-ng.dwellir.com/tcp/30346/p2p/12D3KooWKMYu1L28TkDf1ooMW8D8PHcztLnjV3bausH9eiVTRUYN"
+ "/dns/people-polkadot-boot-ng.dwellir.com/tcp/30346/p2p/12D3KooWKMYu1L28TkDf1ooMW8D8PHcztLnjV3bausH9eiVTRUYN",
+ "/dns/people-polkadot-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWDf2aLDKHQyLkDzdEGs6exNzWWw62s2EK9g1wrujJzRZt"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/chain-specs/people-westend.json b/cumulus/parachains/chain-specs/people-westend.json
index ac24b2e64359..e52d7b299e1d 100644
--- a/cumulus/parachains/chain-specs/people-westend.json
+++ b/cumulus/parachains/chain-specs/people-westend.json
@@ -28,7 +28,8 @@
"/dns/wppl16.rotko.net/tcp/33766/p2p/12D3KooWHwUXBUo2WRMUBwPLC2ttVbnEk1KvDyESYAeKcNoCn7WS",
"/dns/wppl16.rotko.net/tcp/35766/wss/p2p/12D3KooWHwUXBUo2WRMUBwPLC2ttVbnEk1KvDyESYAeKcNoCn7WS",
"/dns/people-westend-boot-ng.dwellir.com/tcp/443/wss/p2p/12D3KooWBdCpCabhgBpLn67LWcXE2JJCCTMhuJHrfDNiTiCCr3KX",
- "/dns/people-westend-boot-ng.dwellir.com/tcp/30355/p2p/12D3KooWBdCpCabhgBpLn67LWcXE2JJCCTMhuJHrfDNiTiCCr3KX"
+ "/dns/people-westend-boot-ng.dwellir.com/tcp/30355/p2p/12D3KooWBdCpCabhgBpLn67LWcXE2JJCCTMhuJHrfDNiTiCCr3KX",
+ "/dns/people-westend-01.bootnode.stkd.io/tcp/30633/wss/p2p/12D3KooWJzL4R3kq9Ms88gsV6bS9zGT8DHySdqwau5SHNqTzToNM"
],
"telemetryEndpoints": null,
"protocolId": null,
diff --git a/cumulus/parachains/common/Cargo.toml b/cumulus/parachains/common/Cargo.toml
index 6d436bdf799a..ae4d7fc1d115 100644
--- a/cumulus/parachains/common/Cargo.toml
+++ b/cumulus/parachains/common/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Logic which is common to all parachain runtimes"
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
@@ -90,4 +92,5 @@ runtime-benchmarks = [
"polkadot-primitives/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
diff --git a/cumulus/parachains/integration-tests/emulated/common/Cargo.toml b/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
index 23edaf6bfe65..8282d12d317f 100644
--- a/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
license = "Apache-2.0"
description = "Common resources for integration testing with xcm-emulator"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/parachains/integration-tests/emulated/common/src/impls.rs b/cumulus/parachains/integration-tests/emulated/common/src/impls.rs
index 78fa12619e08..cfb359030496 100644
--- a/cumulus/parachains/integration-tests/emulated/common/src/impls.rs
+++ b/cumulus/parachains/integration-tests/emulated/common/src/impls.rs
@@ -370,6 +370,8 @@ macro_rules! impl_send_transact_helpers_for_relay_chain {
let destination: $crate::impls::Location = ::child_location_of(recipient);
let xcm = $crate::impls::xcm_transact_unpaid_execution(call, $crate::impls::OriginKind::Superuser);
+ $crate::impls::dmp::Pallet::<::Runtime>::make_parachain_reachable(recipient);
+
// Send XCM `Transact`
$crate::impls::assert_ok!(]>::XcmPallet::send(
root_origin,
diff --git a/cumulus/parachains/integration-tests/emulated/common/src/macros.rs b/cumulus/parachains/integration-tests/emulated/common/src/macros.rs
index b776cafb2545..cd2b41e5198f 100644
--- a/cumulus/parachains/integration-tests/emulated/common/src/macros.rs
+++ b/cumulus/parachains/integration-tests/emulated/common/src/macros.rs
@@ -23,6 +23,7 @@ pub use pallet_message_queue;
pub use pallet_xcm;
// Polkadot
+pub use polkadot_runtime_parachains::dmp::Pallet as Dmp;
pub use xcm::{
prelude::{
AccountId32, All, Asset, AssetId, BuyExecution, DepositAsset, ExpectTransactStatus,
@@ -156,6 +157,8 @@ macro_rules! test_relay_is_trusted_teleporter {
// Send XCM message from Relay
<$sender_relay>::execute_with(|| {
+ $crate::macros::Dmp::<<$sender_relay as $crate::macros::Chain>::Runtime>::make_parachain_reachable(<$receiver_para>::para_id());
+
assert_ok!(<$sender_relay as [<$sender_relay Pallet>]>::XcmPallet::limited_teleport_assets(
origin.clone(),
bx!(para_destination.clone().into()),
diff --git a/cumulus/parachains/integration-tests/emulated/common/src/xcm_helpers.rs b/cumulus/parachains/integration-tests/emulated/common/src/xcm_helpers.rs
index 9125c976525e..380f4983ad98 100644
--- a/cumulus/parachains/integration-tests/emulated/common/src/xcm_helpers.rs
+++ b/cumulus/parachains/integration-tests/emulated/common/src/xcm_helpers.rs
@@ -31,7 +31,7 @@ pub fn xcm_transact_paid_execution(
VersionedXcm::from(Xcm(vec![
WithdrawAsset(fees.clone().into()),
BuyExecution { fees, weight_limit },
- Transact { origin_kind, call },
+ Transact { origin_kind, call, fallback_max_weight: None },
RefundSurplus,
DepositAsset {
assets: All.into(),
@@ -53,7 +53,7 @@ pub fn xcm_transact_unpaid_execution(
VersionedXcm::from(Xcm(vec![
UnpaidExecution { weight_limit, check_origin },
- Transact { origin_kind, call },
+ Transact { origin_kind, call, fallback_max_weight: None },
]))
}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/hybrid_transfers.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/hybrid_transfers.rs
index baec7d20f415..fb95c361f089 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/hybrid_transfers.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/hybrid_transfers.rs
@@ -13,6 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+use rococo_system_emulated_network::rococo_emulated_chain::rococo_runtime::Dmp;
+
use super::reserve_transfer::*;
use crate::{
imports::*,
@@ -777,6 +779,8 @@ fn transfer_native_asset_from_relay_to_para_through_asset_hub() {
xcm: xcm_on_final_dest,
}]);
+ Dmp::make_parachain_reachable(AssetHubRococo::para_id());
+
// First leg is a teleport, from there a local-reserve-transfer to final dest
::XcmPallet::transfer_assets_using_type_and_then(
t.signed_origin,
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs
index 698ef2c9e792..407a581afeb9 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs
@@ -14,6 +14,7 @@
// limitations under the License.
use crate::imports::*;
+use rococo_system_emulated_network::rococo_emulated_chain::rococo_runtime::Dmp;
use sp_core::{crypto::get_public_from_string_or_panic, sr25519};
fn relay_to_para_sender_assertions(t: RelayToParaTest) {
@@ -115,7 +116,7 @@ pub fn system_para_to_para_sender_assertions(t: SystemParaToParaTest) {
assert_expected_events!(
AssetHubRococo,
vec![
- // Transport fees are paid
+ // Delivery fees are paid
RuntimeEvent::PolkadotXcm(pallet_xcm::Event::FeesPaid { .. }) => {},
]
);
@@ -274,7 +275,7 @@ fn system_para_to_para_assets_sender_assertions(t: SystemParaToParaTest) {
t.args.dest.clone()
),
},
- // Transport fees are paid
+ // Delivery fees are paid
RuntimeEvent::PolkadotXcm(
pallet_xcm::Event::FeesPaid { .. }
) => {},
@@ -305,7 +306,7 @@ fn para_to_system_para_assets_sender_assertions(t: ParaToSystemParaTest) {
owner: *owner == t.sender.account_id,
balance: *balance == t.args.amount,
},
- // Transport fees are paid
+ // Delivery fees are paid
RuntimeEvent::PolkadotXcm(
pallet_xcm::Event::FeesPaid { .. }
) => {},
@@ -487,6 +488,11 @@ pub fn para_to_para_through_hop_receiver_assertions(t: Test DispatchResult {
+ let Junction::Parachain(para_id) = *t.args.dest.chain_location().last().unwrap() else {
+ unimplemented!("Destination is not a parachain?")
+ };
+
+ Dmp::make_parachain_reachable(para_id);
::XcmPallet::limited_reserve_transfer_assets(
t.signed_origin,
bx!(t.args.dest.into()),
@@ -546,6 +552,13 @@ fn para_to_system_para_reserve_transfer_assets(t: ParaToSystemParaTest) -> Dispa
fn para_to_para_through_relay_limited_reserve_transfer_assets(
t: ParaToParaThroughRelayTest,
) -> DispatchResult {
+ let Junction::Parachain(para_id) = *t.args.dest.chain_location().last().unwrap() else {
+ unimplemented!("Destination is not a parachain?")
+ };
+
+ Rococo::ext_wrapper(|| {
+ Dmp::make_parachain_reachable(para_id);
+ });
::PolkadotXcm::limited_reserve_transfer_assets(
t.signed_origin,
bx!(t.args.dest.into()),
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/treasury.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/treasury.rs
index 69111d38bcac..8648c8ce9311 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/treasury.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/treasury.rs
@@ -29,6 +29,7 @@ use frame_support::{
use parachains_common::AccountId;
use polkadot_runtime_common::impls::VersionedLocatableAsset;
use rococo_runtime_constants::currency::GRAND;
+use rococo_system_emulated_network::rococo_emulated_chain::rococo_runtime::Dmp;
use xcm_executor::traits::ConvertLocation;
// Fund Treasury account on Asset Hub from Treasury account on Relay Chain with ROCs.
@@ -64,6 +65,7 @@ fn spend_roc_on_asset_hub() {
treasury_balance * 2,
));
+ Dmp::make_parachain_reachable(1000);
let native_asset = Location::here();
let asset_hub_location: Location = [Parachain(1000)].into();
let treasury_location: Location = (Parent, PalletInstance(18)).into();
@@ -199,6 +201,8 @@ fn create_and_claim_treasury_spend_in_usdt() {
// create a conversion rate from `asset_kind` to the native currency.
assert_ok!(AssetRate::create(root.clone(), Box::new(asset_kind.clone()), 2.into()));
+ Dmp::make_parachain_reachable(1000);
+
// create and approve a treasury spend.
assert_ok!(Treasury::spend(
root,
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
index 3cca99fbfe5c..36630e2d2221 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
@@ -106,6 +106,7 @@ mod imports {
pub type ParaToParaThroughRelayTest = Test;
pub type ParaToParaThroughAHTest = Test;
pub type RelayToParaThroughAHTest = Test;
+ pub type PenpalToRelayThroughAHTest = Test;
}
#[cfg(test)]
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/hybrid_transfers.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/hybrid_transfers.rs
index a0fc82fba6ef..91ebdda16828 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/hybrid_transfers.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/hybrid_transfers.rs
@@ -13,6 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+use westend_system_emulated_network::westend_emulated_chain::westend_runtime::Dmp;
+
use super::reserve_transfer::*;
use crate::{
imports::*,
@@ -658,13 +660,13 @@ fn bidirectional_teleport_foreign_asset_between_para_and_asset_hub_using_explici
}
// ===============================================================
-// ===== Transfer - Native Asset - Relay->AssetHub->Parachain ====
+// ====== Transfer - Native Asset - Relay->AssetHub->Penpal ======
// ===============================================================
-/// Transfers of native asset Relay to Parachain (using AssetHub reserve). Parachains want to avoid
+/// Transfers of native asset Relay to Penpal (using AssetHub reserve). Parachains want to avoid
/// managing SAs on all system chains, thus want all their DOT-in-reserve to be held in their
/// Sovereign Account on Asset Hub.
#[test]
-fn transfer_native_asset_from_relay_to_para_through_asset_hub() {
+fn transfer_native_asset_from_relay_to_penpal_through_asset_hub() {
// Init values for Relay
let destination = Westend::child_location_of(PenpalA::para_id());
let sender = WestendSender::get();
@@ -778,6 +780,8 @@ fn transfer_native_asset_from_relay_to_para_through_asset_hub() {
xcm: xcm_on_final_dest,
}]);
+ Dmp::make_parachain_reachable(AssetHubWestend::para_id());
+
// First leg is a teleport, from there a local-reserve-transfer to final dest
::XcmPallet::transfer_assets_using_type_and_then(
t.signed_origin,
@@ -820,6 +824,137 @@ fn transfer_native_asset_from_relay_to_para_through_asset_hub() {
assert!(receiver_assets_after < receiver_assets_before + amount_to_send);
}
+// ===============================================================
+// ===== Transfer - Native Asset - Penpal->AssetHub->Relay =======
+// ===============================================================
+/// Transfers of native asset Penpal to Relay (using AssetHub reserve). Parachains want to avoid
+/// managing SAs on all system chains, thus want all their DOT-in-reserve to be held in their
+/// Sovereign Account on Asset Hub.
+#[test]
+fn transfer_native_asset_from_penpal_to_relay_through_asset_hub() {
+ // Init values for Penpal
+ let destination = RelayLocation::get();
+ let sender = PenpalASender::get();
+ let amount_to_send: Balance = WESTEND_ED * 100;
+
+ // Init values for Penpal
+ let relay_native_asset_location = RelayLocation::get();
+ let receiver = WestendReceiver::get();
+
+ // Init Test
+ let test_args = TestContext {
+ sender: sender.clone(),
+ receiver: receiver.clone(),
+ args: TestArgs::new_para(
+ destination.clone(),
+ receiver.clone(),
+ amount_to_send,
+ (Parent, amount_to_send).into(),
+ None,
+ 0,
+ ),
+ };
+ let mut test = PenpalToRelayThroughAHTest::new(test_args);
+
+ let sov_penpal_on_ah = AssetHubWestend::sovereign_account_id_of(
+ AssetHubWestend::sibling_location_of(PenpalA::para_id()),
+ );
+ // fund Penpal's sender account
+ PenpalA::mint_foreign_asset(
+ ::RuntimeOrigin::signed(PenpalAssetOwner::get()),
+ relay_native_asset_location.clone(),
+ sender.clone(),
+ amount_to_send * 2,
+ );
+ // fund Penpal's SA on AssetHub with the assets held in reserve
+ AssetHubWestend::fund_accounts(vec![(sov_penpal_on_ah.clone().into(), amount_to_send * 2)]);
+
+ // prefund Relay checking account so we accept teleport "back" from AssetHub
+ let check_account =
+ Westend::execute_with(|| ::XcmPallet::check_account());
+ Westend::fund_accounts(vec![(check_account, amount_to_send)]);
+
+ // Query initial balances
+ let sender_balance_before = PenpalA::execute_with(|| {
+ type ForeignAssets = ::ForeignAssets;
+ >::balance(relay_native_asset_location.clone(), &sender)
+ });
+ let sov_penpal_on_ah_before = AssetHubWestend::execute_with(|| {
+ ::Balances::free_balance(sov_penpal_on_ah.clone())
+ });
+ let receiver_balance_before = Westend::execute_with(|| {
+ ::Balances::free_balance(receiver.clone())
+ });
+
+ fn transfer_assets_dispatchable(t: PenpalToRelayThroughAHTest) -> DispatchResult {
+ let fee_idx = t.args.fee_asset_item as usize;
+ let fee: Asset = t.args.assets.inner().get(fee_idx).cloned().unwrap();
+ let asset_hub_location = PenpalA::sibling_location_of(AssetHubWestend::para_id());
+ let context = PenpalUniversalLocation::get();
+
+ // reanchor fees to the view of destination (Westend Relay)
+ let mut remote_fees = fee.clone().reanchored(&t.args.dest, &context).unwrap();
+ if let Fungible(ref mut amount) = remote_fees.fun {
+ // we already spent some fees along the way, just use half of what we started with
+ *amount = *amount / 2;
+ }
+ let xcm_on_final_dest = Xcm::<()>(vec![
+ BuyExecution { fees: remote_fees, weight_limit: t.args.weight_limit.clone() },
+ DepositAsset {
+ assets: Wild(AllCounted(t.args.assets.len() as u32)),
+ beneficiary: t.args.beneficiary,
+ },
+ ]);
+
+ // reanchor final dest (Westend Relay) to the view of hop (Asset Hub)
+ let mut dest = t.args.dest.clone();
+ dest.reanchor(&asset_hub_location, &context).unwrap();
+ // on Asset Hub
+ let xcm_on_hop = Xcm::<()>(vec![InitiateTeleport {
+ assets: Wild(AllCounted(t.args.assets.len() as u32)),
+ dest,
+ xcm: xcm_on_final_dest,
+ }]);
+
+ // First leg is a reserve-withdraw, from there a teleport to final dest
+ ::PolkadotXcm::transfer_assets_using_type_and_then(
+ t.signed_origin,
+ bx!(asset_hub_location.into()),
+ bx!(t.args.assets.into()),
+ bx!(TransferType::DestinationReserve),
+ bx!(fee.id.into()),
+ bx!(TransferType::DestinationReserve),
+ bx!(VersionedXcm::from(xcm_on_hop)),
+ t.args.weight_limit,
+ )
+ }
+ test.set_dispatchable::(transfer_assets_dispatchable);
+ test.assert();
+
+ // Query final balances
+ let sender_balance_after = PenpalA::execute_with(|| {
+ type ForeignAssets = ::ForeignAssets;
+ >::balance(relay_native_asset_location.clone(), &sender)
+ });
+ let sov_penpal_on_ah_after = AssetHubWestend::execute_with(|| {
+ ::Balances::free_balance(sov_penpal_on_ah.clone())
+ });
+ let receiver_balance_after = Westend::execute_with(|| {
+ ::Balances::free_balance(receiver.clone())
+ });
+
+ // Sender's asset balance is reduced by amount sent plus delivery fees
+ assert!(sender_balance_after < sender_balance_before - amount_to_send);
+ // SA on AH balance is decreased by `amount_to_send`
+ assert_eq!(sov_penpal_on_ah_after, sov_penpal_on_ah_before - amount_to_send);
+ // Receiver's balance is increased
+ assert!(receiver_balance_after > receiver_balance_before);
+ // Receiver's balance increased by `amount_to_send - delivery_fees - bought_execution`;
+ // `delivery_fees` might be paid from transfer or JIT, also `bought_execution` is unknown but
+ // should be non-zero
+ assert!(receiver_balance_after < receiver_balance_before + amount_to_send);
+}
+
// ==============================================================================================
// ==== Bidirectional Transfer - Native + Teleportable Foreign Assets - Parachain<->AssetHub ====
// ==============================================================================================
@@ -839,7 +974,7 @@ fn bidirectional_transfer_multiple_assets_between_penpal_and_asset_hub() {
// xcm to be executed at dest
let xcm_on_dest = Xcm(vec![
// since this is the last hop, we don't need to further use any assets previously
- // reserved for fees (there are no further hops to cover transport fees for); we
+ // reserved for fees (there are no further hops to cover delivery fees for); we
// RefundSurplus to get back any unspent fees
RefundSurplus,
DepositAsset { assets: Wild(All), beneficiary: t.args.beneficiary },
@@ -875,7 +1010,7 @@ fn bidirectional_transfer_multiple_assets_between_penpal_and_asset_hub() {
// xcm to be executed at dest
let xcm_on_dest = Xcm(vec![
// since this is the last hop, we don't need to further use any assets previously
- // reserved for fees (there are no further hops to cover transport fees for); we
+ // reserved for fees (there are no further hops to cover delivery fees for); we
// RefundSurplus to get back any unspent fees
RefundSurplus,
DepositAsset { assets: Wild(All), beneficiary: t.args.beneficiary },
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs
index 558eab13e5c7..dc36fed42932 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs
@@ -15,6 +15,7 @@
use crate::{create_pool_with_wnd_on, foreign_balance_on, imports::*};
use sp_core::{crypto::get_public_from_string_or_panic, sr25519};
+use westend_system_emulated_network::westend_emulated_chain::westend_runtime::Dmp;
fn relay_to_para_sender_assertions(t: RelayToParaTest) {
type RuntimeEvent = ::RuntimeEvent;
@@ -115,7 +116,7 @@ pub fn system_para_to_para_sender_assertions(t: SystemParaToParaTest) {
assert_expected_events!(
AssetHubWestend,
vec![
- // Transport fees are paid
+ // Delivery fees are paid
RuntimeEvent::PolkadotXcm(pallet_xcm::Event::FeesPaid { .. }) => {},
]
);
@@ -274,7 +275,7 @@ fn system_para_to_para_assets_sender_assertions(t: SystemParaToParaTest) {
t.args.dest.clone()
),
},
- // Transport fees are paid
+ // Delivery fees are paid
RuntimeEvent::PolkadotXcm(
pallet_xcm::Event::FeesPaid { .. }
) => {},
@@ -305,7 +306,7 @@ fn para_to_system_para_assets_sender_assertions(t: ParaToSystemParaTest) {
owner: *owner == t.sender.account_id,
balance: *balance == t.args.amount,
},
- // Transport fees are paid
+ // Delivery fees are paid
RuntimeEvent::PolkadotXcm(
pallet_xcm::Event::FeesPaid { .. }
) => {},
@@ -487,6 +488,11 @@ pub fn para_to_para_through_hop_receiver_assertions(t: Test DispatchResult {
+ let Junction::Parachain(para_id) = *t.args.dest.chain_location().last().unwrap() else {
+ unimplemented!("Destination is not a parachain?")
+ };
+
+ Dmp::make_parachain_reachable(para_id);
::XcmPallet::limited_reserve_transfer_assets(
t.signed_origin,
bx!(t.args.dest.into()),
@@ -533,6 +539,13 @@ fn para_to_system_para_reserve_transfer_assets(t: ParaToSystemParaTest) -> Dispa
fn para_to_para_through_relay_limited_reserve_transfer_assets(
t: ParaToParaThroughRelayTest,
) -> DispatchResult {
+ let Junction::Parachain(para_id) = *t.args.dest.chain_location().last().unwrap() else {
+ unimplemented!("Destination is not a parachain?")
+ };
+
+ Westend::ext_wrapper(|| {
+ Dmp::make_parachain_reachable(para_id);
+ });
::PolkadotXcm::limited_reserve_transfer_assets(
t.signed_origin,
bx!(t.args.dest.into()),
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/set_asset_claimer.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/set_asset_claimer.rs
index 544b05360521..bc00106b47c1 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/set_asset_claimer.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/set_asset_claimer.rs
@@ -44,7 +44,7 @@ fn test_set_asset_claimer_within_a_chain() {
type RuntimeCall = ::RuntimeCall;
let asset_trap_xcm = Xcm::::builder_unsafe()
- .set_asset_claimer(bob_location.clone())
+ .set_hints(vec![AssetClaimer { location: bob_location.clone() }])
.withdraw_asset(assets.clone())
.clear_origin()
.build();
@@ -116,7 +116,7 @@ fn test_set_asset_claimer_between_the_chains() {
let assets: Assets = (Parent, trap_amount).into();
type RuntimeCall = ::RuntimeCall;
let trap_xcm = Xcm::::builder_unsafe()
- .set_asset_claimer(alice_bh_sibling.clone())
+ .set_hints(vec![AssetClaimer { location: alice_bh_sibling.clone() }])
.withdraw_asset(assets.clone())
.clear_origin()
.build();
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/transact.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/transact.rs
index 3c53cfb261be..7e881a332a53 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/transact.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/transact.rs
@@ -43,10 +43,10 @@ fn transfer_and_transact_in_same_xcm(
// xcm to be executed at dest
let xcm_on_dest = Xcm(vec![
- Transact { origin_kind: OriginKind::Xcm, call },
+ Transact { origin_kind: OriginKind::Xcm, call, fallback_max_weight: None },
ExpectTransactStatus(MaybeErrorCode::Success),
// since this is the last hop, we don't need to further use any assets previously
- // reserved for fees (there are no further hops to cover transport fees for); we
+ // reserved for fees (there are no further hops to cover delivery fees for); we
// RefundSurplus to get back any unspent fees
RefundSurplus,
DepositAsset { assets: Wild(All), beneficiary },
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/treasury.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/treasury.rs
index c303e6411d33..3b53557fc05c 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/treasury.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/treasury.rs
@@ -20,6 +20,7 @@ use emulated_integration_tests_common::{
};
use frame_support::traits::fungibles::{Inspect, Mutate};
use polkadot_runtime_common::impls::VersionedLocatableAsset;
+use westend_system_emulated_network::westend_emulated_chain::westend_runtime::Dmp;
use xcm_executor::traits::ConvertLocation;
#[test]
@@ -58,6 +59,8 @@ fn create_and_claim_treasury_spend() {
// create a conversion rate from `asset_kind` to the native currency.
assert_ok!(AssetRate::create(root.clone(), Box::new(asset_kind.clone()), 2.into()));
+ Dmp::make_parachain_reachable(1000);
+
// create and approve a treasury spend.
assert_ok!(Treasury::spend(
root,
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/asset_transfers.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/asset_transfers.rs
index 33ab1e70b97b..a2a61660afff 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/asset_transfers.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/asset_transfers.rs
@@ -16,7 +16,7 @@
use crate::tests::*;
fn send_assets_over_bridge(send_fn: F) {
- // fund the AHR's SA on BHR for paying bridge transport fees
+ // fund the AHR's SA on BHR for paying bridge delivery fees
BridgeHubRococo::fund_para_sovereign(AssetHubRococo::para_id(), 10_000_000_000_000u128);
// set XCM versions
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/register_bridged_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/register_bridged_assets.rs
index 1ae3a1b15805..70e7a7a3ddd3 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/register_bridged_assets.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/register_bridged_assets.rs
@@ -58,7 +58,7 @@ fn register_rococo_asset_on_wah_from_rah() {
let destination = asset_hub_westend_location();
- // fund the RAH's SA on RBH for paying bridge transport fees
+ // fund the RAH's SA on RBH for paying bridge delivery fees
BridgeHubRococo::fund_para_sovereign(AssetHubRococo::para_id(), 10_000_000_000_000u128);
// set XCM versions
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/send_xcm.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/send_xcm.rs
index 931a3128f826..cfcb581238e6 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/send_xcm.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/send_xcm.rs
@@ -13,6 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+use rococo_system_emulated_network::rococo_emulated_chain::rococo_runtime::Dmp;
+
use crate::tests::*;
#[test]
@@ -38,6 +40,8 @@ fn send_xcm_from_rococo_relay_to_westend_asset_hub_should_fail_on_not_applicable
// Rococo Global Consensus
// Send XCM message from Relay Chain to Bridge Hub source Parachain
Rococo::execute_with(|| {
+ Dmp::make_parachain_reachable(BridgeHubRococo::para_id());
+
assert_ok!(::XcmPallet::send(
sudo_origin,
bx!(destination),
@@ -65,7 +69,7 @@ fn send_xcm_through_opened_lane_with_different_xcm_version_on_hops_works() {
let native_token = Location::parent();
let amount = ASSET_HUB_ROCOCO_ED * 1_000;
- // fund the AHR's SA on BHR for paying bridge transport fees
+ // fund the AHR's SA on BHR for paying bridge delivery fees
BridgeHubRococo::fund_para_sovereign(AssetHubRococo::para_id(), 10_000_000_000_000u128);
// fund sender
AssetHubRococo::fund_accounts(vec![(AssetHubRococoSender::get().into(), amount * 10)]);
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/snowbridge.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/snowbridge.rs
index d59553574c26..c72d5045ddc0 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/snowbridge.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-rococo/src/tests/snowbridge.rs
@@ -84,7 +84,11 @@ fn create_agent() {
let remote_xcm = VersionedXcm::from(Xcm(vec![
UnpaidExecution { weight_limit: Unlimited, check_origin: None },
DescendOrigin(Parachain(origin_para).into()),
- Transact { origin_kind: OriginKind::Xcm, call: create_agent_call.encode().into() },
+ Transact {
+ origin_kind: OriginKind::Xcm,
+ call: create_agent_call.encode().into(),
+ fallback_max_weight: None,
+ },
]));
// Rococo Global Consensus
@@ -138,7 +142,11 @@ fn create_channel() {
let create_agent_xcm = VersionedXcm::from(Xcm(vec![
UnpaidExecution { weight_limit: Unlimited, check_origin: None },
DescendOrigin(Parachain(origin_para).into()),
- Transact { origin_kind: OriginKind::Xcm, call: create_agent_call.encode().into() },
+ Transact {
+ origin_kind: OriginKind::Xcm,
+ call: create_agent_call.encode().into(),
+ fallback_max_weight: None,
+ },
]));
let create_channel_call =
@@ -147,7 +155,11 @@ fn create_channel() {
let create_channel_xcm = VersionedXcm::from(Xcm(vec![
UnpaidExecution { weight_limit: Unlimited, check_origin: None },
DescendOrigin(Parachain(origin_para).into()),
- Transact { origin_kind: OriginKind::Xcm, call: create_channel_call.encode().into() },
+ Transact {
+ origin_kind: OriginKind::Xcm,
+ call: create_channel_call.encode().into(),
+ fallback_max_weight: None,
+ },
]));
// Rococo Global Consensus
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/asset_transfers.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/asset_transfers.rs
index ab09517339db..cc90c10b54bc 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/asset_transfers.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/asset_transfers.rs
@@ -17,7 +17,7 @@ use crate::{create_pool_with_native_on, tests::*};
use xcm::latest::AssetTransferFilter;
fn send_assets_over_bridge(send_fn: F) {
- // fund the AHW's SA on BHW for paying bridge transport fees
+ // fund the AHW's SA on BHW for paying bridge delivery fees
BridgeHubWestend::fund_para_sovereign(AssetHubWestend::para_id(), 10_000_000_000_000u128);
// set XCM versions
@@ -592,7 +592,7 @@ fn do_send_pens_and_wnds_from_penpal_westend_via_ahw_to_asset_hub_rococo(
// XCM to be executed at dest (Rococo Asset Hub)
let xcm_on_dest = Xcm(vec![
// since this is the last hop, we don't need to further use any assets previously
- // reserved for fees (there are no further hops to cover transport fees for); we
+ // reserved for fees (there are no further hops to cover delivery fees for); we
// RefundSurplus to get back any unspent fees
RefundSurplus,
// deposit everything to final beneficiary
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/register_bridged_assets.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/register_bridged_assets.rs
index 424f1e55956b..952fc35e6703 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/register_bridged_assets.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/register_bridged_assets.rs
@@ -82,7 +82,7 @@ fn register_asset_on_rah_from_wah(bridged_asset_at_rah: Location) {
let destination = asset_hub_rococo_location();
- // fund the WAH's SA on WBH for paying bridge transport fees
+ // fund the WAH's SA on WBH for paying bridge delivery fees
BridgeHubWestend::fund_para_sovereign(AssetHubWestend::para_id(), 10_000_000_000_000u128);
// set XCM versions
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/send_xcm.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/send_xcm.rs
index 787d7dc842cb..60f8af2242f9 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/send_xcm.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/send_xcm.rs
@@ -13,6 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+use rococo_westend_system_emulated_network::westend_emulated_chain::westend_runtime::Dmp;
+
use crate::tests::*;
#[test]
@@ -38,6 +40,8 @@ fn send_xcm_from_westend_relay_to_rococo_asset_hub_should_fail_on_not_applicable
// Westend Global Consensus
// Send XCM message from Relay Chain to Bridge Hub source Parachain
Westend::execute_with(|| {
+ Dmp::make_parachain_reachable(BridgeHubWestend::para_id());
+
assert_ok!(::XcmPallet::send(
sudo_origin,
bx!(destination),
@@ -65,7 +69,7 @@ fn send_xcm_through_opened_lane_with_different_xcm_version_on_hops_works() {
let native_token = Location::parent();
let amount = ASSET_HUB_WESTEND_ED * 1_000;
- // fund the AHR's SA on BHR for paying bridge transport fees
+ // fund the AHR's SA on BHR for paying bridge delivery fees
BridgeHubWestend::fund_para_sovereign(AssetHubWestend::para_id(), 10_000_000_000_000u128);
// fund sender
AssetHubWestend::fund_accounts(vec![(AssetHubWestendSender::get().into(), amount * 10)]);
diff --git a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/transact.rs b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/transact.rs
index db42704dae61..f6a3c53c4bf5 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/transact.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/bridges/bridge-hub-westend/src/tests/transact.rs
@@ -49,10 +49,10 @@ fn transfer_and_transact_in_same_xcm(
// xcm to be executed at dest
let xcm_on_dest = Xcm(vec![
- Transact { origin_kind: OriginKind::Xcm, call },
+ Transact { origin_kind: OriginKind::Xcm, call, fallback_max_weight: None },
ExpectTransactStatus(MaybeErrorCode::Success),
// since this is the last hop, we don't need to further use any assets previously
- // reserved for fees (there are no further hops to cover transport fees for); we
+ // reserved for fees (there are no further hops to cover delivery fees for); we
// RefundSurplus to get back any unspent fees
RefundSurplus,
DepositAsset { assets: Wild(All), beneficiary },
diff --git a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship.rs b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship.rs
index 80b82e0c446f..802fed1e681d 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship.rs
@@ -41,6 +41,7 @@ fn fellows_whitelist_call() {
)
.encode()
.into(),
+ fallback_max_weight: None
}
]))),
});
diff --git a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship_treasury.rs b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship_treasury.rs
index 8418e3da3bba..ed7c9bafc607 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship_treasury.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/collectives/collectives-westend/src/tests/fellowship_treasury.rs
@@ -20,6 +20,7 @@ use frame_support::{
};
use polkadot_runtime_common::impls::VersionedLocatableAsset;
use westend_runtime_constants::currency::UNITS;
+use westend_system_emulated_network::westend_emulated_chain::westend_runtime::Dmp;
use xcm_executor::traits::ConvertLocation;
// Fund Fellowship Treasury from Westend Treasury and spend from Fellowship Treasury.
@@ -57,6 +58,8 @@ fn fellowship_treasury_spend() {
treasury_balance * 2,
));
+ Dmp::make_parachain_reachable(1000);
+
let native_asset = Location::here();
let asset_hub_location: Location = [Parachain(1000)].into();
let treasury_location: Location = (Parent, PalletInstance(37)).into();
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/coretime_interface.rs b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/coretime_interface.rs
index 9915b1753ef6..554025e1ecfe 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/coretime_interface.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-rococo/src/tests/coretime_interface.rs
@@ -17,6 +17,7 @@ use crate::imports::*;
use frame_support::traits::OnInitialize;
use pallet_broker::{ConfigRecord, Configuration, CoreAssignment, CoreMask, ScheduleItem};
use rococo_runtime_constants::system_parachain::coretime::TIMESLICE_PERIOD;
+use rococo_system_emulated_network::rococo_emulated_chain::rococo_runtime::Dmp;
use sp_runtime::Perbill;
#[test]
@@ -34,6 +35,10 @@ fn transact_hardcoded_weights_are_sane() {
type CoretimeEvent = ::RuntimeEvent;
type RelayEvent = ::RuntimeEvent;
+ Rococo::execute_with(|| {
+ Dmp::make_parachain_reachable(CoretimeRococo::para_id());
+ });
+
// Reserve a workload, configure broker and start sales.
CoretimeRococo::execute_with(|| {
// Hooks don't run in emulated tests - workaround as we need `on_initialize` to tick things
diff --git a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/coretime_interface.rs b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/coretime_interface.rs
index 00530f80b958..900994b1afc1 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/coretime_interface.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/coretime/coretime-westend/src/tests/coretime_interface.rs
@@ -18,6 +18,7 @@ use frame_support::traits::OnInitialize;
use pallet_broker::{ConfigRecord, Configuration, CoreAssignment, CoreMask, ScheduleItem};
use sp_runtime::Perbill;
use westend_runtime_constants::system_parachain::coretime::TIMESLICE_PERIOD;
+use westend_system_emulated_network::westend_emulated_chain::westend_runtime::Dmp;
#[test]
fn transact_hardcoded_weights_are_sane() {
@@ -34,6 +35,10 @@ fn transact_hardcoded_weights_are_sane() {
type CoretimeEvent = ::RuntimeEvent;
type RelayEvent = ::RuntimeEvent;
+ Westend::execute_with(|| {
+ Dmp::make_parachain_reachable(CoretimeWestend::para_id());
+ });
+
// Reserve a workload, configure broker and start sales.
CoretimeWestend::execute_with(|| {
// Hooks don't run in emulated tests - workaround as we need `on_initialize` to tick things
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/Cargo.toml b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/Cargo.toml
index aa6eebc5458f..53acd038cdf5 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/Cargo.toml
@@ -21,6 +21,7 @@ sp-runtime = { workspace = true }
# Polkadot
polkadot-runtime-common = { workspace = true, default-features = true }
westend-runtime-constants = { workspace = true, default-features = true }
+westend-runtime = { workspace = true }
xcm = { workspace = true }
xcm-executor = { workspace = true }
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/governance.rs b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/governance.rs
new file mode 100644
index 000000000000..ea438f80552e
--- /dev/null
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/governance.rs
@@ -0,0 +1,550 @@
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crate::imports::*;
+use frame_support::traits::ProcessMessageError;
+
+use codec::Encode;
+use frame_support::sp_runtime::traits::Dispatchable;
+use parachains_common::AccountId;
+use people_westend_runtime::people::IdentityInfo;
+use westend_runtime::{
+ governance::pallet_custom_origins::Origin::GeneralAdmin as GeneralAdminOrigin, Dmp,
+};
+use westend_system_emulated_network::people_westend_emulated_chain::people_westend_runtime;
+
+use pallet_identity::Data;
+
+use emulated_integration_tests_common::accounts::{ALICE, BOB};
+
+#[test]
+fn relay_commands_add_registrar() {
+ let (origin_kind, origin) = (OriginKind::Superuser, ::RuntimeOrigin::root());
+
+ let registrar: AccountId = [1; 32].into();
+ Westend::execute_with(|| {
+ type Runtime = ::Runtime;
+ type RuntimeCall = ::RuntimeCall;
+ type RuntimeEvent = ::RuntimeEvent;
+ type PeopleCall = ::RuntimeCall;
+ type PeopleRuntime = ::Runtime;
+
+ Dmp::make_parachain_reachable(1004);
+
+ let add_registrar_call =
+ PeopleCall::Identity(pallet_identity::Call::::add_registrar {
+ account: registrar.into(),
+ });
+
+ let xcm_message = RuntimeCall::XcmPallet(pallet_xcm::Call::::send {
+ dest: bx!(VersionedLocation::from(Location::new(0, [Parachain(1004)]))),
+ message: bx!(VersionedXcm::from(Xcm(vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind,
+ call: add_registrar_call.encode().into(),
+ fallback_max_weight: None
+ }
+ ]))),
+ });
+
+ assert_ok!(xcm_message.dispatch(origin));
+
+ assert_expected_events!(
+ Westend,
+ vec![
+ RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {},
+ ]
+ );
+ });
+
+ PeopleWestend::execute_with(|| {
+ type RuntimeEvent = ::RuntimeEvent;
+
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ RuntimeEvent::Identity(pallet_identity::Event::RegistrarAdded { .. }) => {},
+ RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {},
+ ]
+ );
+ });
+}
+
+#[test]
+fn relay_commands_add_registrar_wrong_origin() {
+ let people_westend_alice = PeopleWestend::account_id_of(ALICE);
+
+ let origins = vec![
+ (
+ OriginKind::SovereignAccount,
+ ::RuntimeOrigin::signed(people_westend_alice),
+ ),
+ (OriginKind::Xcm, GeneralAdminOrigin.into()),
+ ];
+
+ let mut signed_origin = true;
+
+ for (origin_kind, origin) in origins {
+ let registrar: AccountId = [1; 32].into();
+ Westend::execute_with(|| {
+ type Runtime = ::Runtime;
+ type RuntimeCall = ::RuntimeCall;
+ type RuntimeEvent = ::RuntimeEvent;
+ type PeopleCall = ::RuntimeCall;
+ type PeopleRuntime = ::Runtime;
+
+ Dmp::make_parachain_reachable(1004);
+
+ let add_registrar_call =
+ PeopleCall::Identity(pallet_identity::Call::::add_registrar {
+ account: registrar.into(),
+ });
+
+ let xcm_message = RuntimeCall::XcmPallet(pallet_xcm::Call::::send {
+ dest: bx!(VersionedLocation::from(Location::new(0, [Parachain(1004)]))),
+ message: bx!(VersionedXcm::from(Xcm(vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind,
+ call: add_registrar_call.encode().into(),
+ fallback_max_weight: None
+ }
+ ]))),
+ });
+
+ assert_ok!(xcm_message.dispatch(origin));
+ assert_expected_events!(
+ Westend,
+ vec![
+ RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {},
+ ]
+ );
+ });
+
+ PeopleWestend::execute_with(|| {
+ type RuntimeEvent = ::RuntimeEvent;
+
+ if signed_origin {
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ RuntimeEvent::MessageQueue(pallet_message_queue::Event::ProcessingFailed { error: ProcessMessageError::Unsupported, .. }) => {},
+ ]
+ );
+ } else {
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {},
+ ]
+ );
+ }
+ });
+
+ signed_origin = false;
+ }
+}
+
+#[test]
+fn relay_commands_kill_identity() {
+ // To kill an identity, first one must be set
+ PeopleWestend::execute_with(|| {
+ type PeopleRuntime = ::Runtime;
+ type PeopleRuntimeEvent = ::RuntimeEvent;
+
+ let people_westend_alice =
+ ::RuntimeOrigin::signed(PeopleWestend::account_id_of(ALICE));
+
+ let identity_info = IdentityInfo {
+ email: Data::Raw(b"test@test.io".to_vec().try_into().unwrap()),
+ ..Default::default()
+ };
+ let identity: Box<::IdentityInformation> =
+ Box::new(identity_info);
+
+ assert_ok!(::Identity::set_identity(
+ people_westend_alice,
+ identity
+ ));
+
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ PeopleRuntimeEvent::Identity(pallet_identity::Event::IdentitySet { .. }) => {},
+ ]
+ );
+ });
+
+ let (origin_kind, origin) = (OriginKind::Superuser, ::RuntimeOrigin::root());
+
+ Westend::execute_with(|| {
+ type Runtime = ::Runtime;
+ type RuntimeCall = ::RuntimeCall;
+ type PeopleCall = ::RuntimeCall;
+ type RuntimeEvent = ::RuntimeEvent;
+ type PeopleRuntime = ::Runtime;
+
+ Dmp::make_parachain_reachable(1004);
+
+ let kill_identity_call =
+ PeopleCall::Identity(pallet_identity::Call::::kill_identity {
+ target: people_westend_runtime::MultiAddress::Id(PeopleWestend::account_id_of(
+ ALICE,
+ )),
+ });
+
+ let xcm_message = RuntimeCall::XcmPallet(pallet_xcm::Call::::send {
+ dest: bx!(VersionedLocation::from(Location::new(0, [Parachain(1004)]))),
+ message: bx!(VersionedXcm::from(Xcm(vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind,
+ call: kill_identity_call.encode().into(),
+ fallback_max_weight: None
+ }
+ ]))),
+ });
+
+ assert_ok!(xcm_message.dispatch(origin));
+
+ assert_expected_events!(
+ Westend,
+ vec![
+ RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {},
+ ]
+ );
+ });
+
+ PeopleWestend::execute_with(|| {
+ type RuntimeEvent = ::RuntimeEvent;
+
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ RuntimeEvent::Identity(pallet_identity::Event::IdentityKilled { .. }) => {},
+ RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {},
+ ]
+ );
+ });
+}
+
+#[test]
+fn relay_commands_kill_identity_wrong_origin() {
+ let people_westend_alice = PeopleWestend::account_id_of(BOB);
+
+ let origins = vec![
+ (
+ OriginKind::SovereignAccount,
+ ::RuntimeOrigin::signed(people_westend_alice),
+ ),
+ (OriginKind::Xcm, GeneralAdminOrigin.into()),
+ ];
+
+ for (origin_kind, origin) in origins {
+ Westend::execute_with(|| {
+ type Runtime = ::Runtime;
+ type RuntimeCall = ::RuntimeCall;
+ type PeopleCall = ::RuntimeCall;
+ type RuntimeEvent = ::RuntimeEvent;
+ type PeopleRuntime = ::Runtime;
+
+ Dmp::make_parachain_reachable(1004);
+
+ let kill_identity_call =
+ PeopleCall::Identity(pallet_identity::Call::::kill_identity {
+ target: people_westend_runtime::MultiAddress::Id(PeopleWestend::account_id_of(
+ ALICE,
+ )),
+ });
+
+ let xcm_message = RuntimeCall::XcmPallet(pallet_xcm::Call::::send {
+ dest: bx!(VersionedLocation::from(Location::new(0, [Parachain(1004)]))),
+ message: bx!(VersionedXcm::from(Xcm(vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind,
+ call: kill_identity_call.encode().into(),
+ fallback_max_weight: None
+ }
+ ]))),
+ });
+
+ assert_ok!(xcm_message.dispatch(origin));
+ assert_expected_events!(
+ Westend,
+ vec![
+ RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {},
+ ]
+ );
+ });
+
+ PeopleWestend::execute_with(|| {
+ assert_expected_events!(PeopleWestend, vec![]);
+ });
+ }
+}
+
+#[test]
+fn relay_commands_add_remove_username_authority() {
+ let people_westend_alice = PeopleWestend::account_id_of(ALICE);
+ let people_westend_bob = PeopleWestend::account_id_of(BOB);
+
+ let (origin_kind, origin, usr) =
+ (OriginKind::Superuser, ::RuntimeOrigin::root(), "rootusername");
+
+ // First, add a username authority.
+ Westend::execute_with(|| {
+ type Runtime = ::Runtime;
+ type RuntimeCall = ::RuntimeCall;
+ type RuntimeEvent = ::RuntimeEvent;
+ type PeopleCall = ::RuntimeCall;
+ type PeopleRuntime = ::Runtime;
+
+ Dmp::make_parachain_reachable(1004);
+
+ let add_username_authority =
+ PeopleCall::Identity(pallet_identity::Call::::add_username_authority {
+ authority: people_westend_runtime::MultiAddress::Id(people_westend_alice.clone()),
+ suffix: b"suffix1".into(),
+ allocation: 10,
+ });
+
+ let add_authority_xcm_msg = RuntimeCall::XcmPallet(pallet_xcm::Call::::send {
+ dest: bx!(VersionedLocation::from(Location::new(0, [Parachain(1004)]))),
+ message: bx!(VersionedXcm::from(Xcm(vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind,
+ call: add_username_authority.encode().into(),
+ fallback_max_weight: None
+ }
+ ]))),
+ });
+
+ assert_ok!(add_authority_xcm_msg.dispatch(origin.clone()));
+
+ assert_expected_events!(
+ Westend,
+ vec![
+ RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {},
+ ]
+ );
+ });
+
+ // Check events system-parachain-side
+ PeopleWestend::execute_with(|| {
+ type RuntimeEvent = ::RuntimeEvent;
+
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ RuntimeEvent::Identity(pallet_identity::Event::AuthorityAdded { .. }) => {},
+ RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {},
+ ]
+ );
+ });
+
+ // Now, use the previously added username authority to concede a username to an account.
+ PeopleWestend::execute_with(|| {
+ type PeopleRuntimeEvent = ::RuntimeEvent;
+ let full_username = [usr.to_owned(), ".suffix1".to_owned()].concat().into_bytes();
+
+ assert_ok!(::Identity::set_username_for(
+ ::RuntimeOrigin::signed(people_westend_alice.clone()),
+ people_westend_runtime::MultiAddress::Id(people_westend_bob.clone()),
+ full_username,
+ None,
+ true
+ ));
+
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ PeopleRuntimeEvent::Identity(pallet_identity::Event::UsernameQueued { .. }) => {},
+ ]
+ );
+ });
+
+ // Accept the given username
+ PeopleWestend::execute_with(|| {
+ type PeopleRuntimeEvent = ::RuntimeEvent;
+ let full_username = [usr.to_owned(), ".suffix1".to_owned()].concat().into_bytes();
+
+ assert_ok!(::Identity::accept_username(
+ ::RuntimeOrigin::signed(people_westend_bob.clone()),
+ full_username.try_into().unwrap(),
+ ));
+
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ PeopleRuntimeEvent::Identity(pallet_identity::Event::UsernameSet { .. }) => {},
+ ]
+ );
+ });
+
+ // Now, remove the username authority with another priviledged XCM call.
+ Westend::execute_with(|| {
+ type Runtime = ::Runtime;
+ type RuntimeCall = ::RuntimeCall;
+ type RuntimeEvent = ::RuntimeEvent;
+ type PeopleCall = ::RuntimeCall;
+ type PeopleRuntime = ::Runtime;
+
+ Dmp::make_parachain_reachable(1004);
+
+ let remove_username_authority = PeopleCall::Identity(pallet_identity::Call::<
+ PeopleRuntime,
+ >::remove_username_authority {
+ authority: people_westend_runtime::MultiAddress::Id(people_westend_alice.clone()),
+ suffix: b"suffix1".into(),
+ });
+
+ let remove_authority_xcm_msg = RuntimeCall::XcmPallet(pallet_xcm::Call::::send {
+ dest: bx!(VersionedLocation::from(Location::new(0, [Parachain(1004)]))),
+ message: bx!(VersionedXcm::from(Xcm(vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind,
+ call: remove_username_authority.encode().into(),
+ fallback_max_weight: None
+ }
+ ]))),
+ });
+
+ assert_ok!(remove_authority_xcm_msg.dispatch(origin));
+
+ assert_expected_events!(
+ Westend,
+ vec![
+ RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {},
+ ]
+ );
+ });
+
+ // Final event check.
+ PeopleWestend::execute_with(|| {
+ type RuntimeEvent = ::RuntimeEvent;
+
+ assert_expected_events!(
+ PeopleWestend,
+ vec![
+ RuntimeEvent::Identity(pallet_identity::Event::AuthorityRemoved { .. }) => {},
+ RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {},
+ ]
+ );
+ });
+}
+
+#[test]
+fn relay_commands_add_remove_username_authority_wrong_origin() {
+ let people_westend_alice = PeopleWestend::account_id_of(ALICE);
+
+ let origins = vec![
+ (
+ OriginKind::SovereignAccount,
+ ::RuntimeOrigin::signed(people_westend_alice.clone()),
+ ),
+ (OriginKind::Xcm, GeneralAdminOrigin.into()),
+ ];
+
+ for (origin_kind, origin) in origins {
+ Westend::execute_with(|| {
+ type Runtime = ::Runtime;
+ type RuntimeCall = ::RuntimeCall;
+ type RuntimeEvent = ::RuntimeEvent;
+ type PeopleCall = ::RuntimeCall;
+ type PeopleRuntime = ::Runtime;
+
+ Dmp::make_parachain_reachable(1004);
+
+ let add_username_authority = PeopleCall::Identity(pallet_identity::Call::<
+ PeopleRuntime,
+ >::add_username_authority {
+ authority: people_westend_runtime::MultiAddress::Id(people_westend_alice.clone()),
+ suffix: b"suffix1".into(),
+ allocation: 10,
+ });
+
+ let add_authority_xcm_msg = RuntimeCall::XcmPallet(pallet_xcm::Call::::send {
+ dest: bx!(VersionedLocation::from(Location::new(0, [Parachain(1004)]))),
+ message: bx!(VersionedXcm::from(Xcm(vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind,
+ call: add_username_authority.encode().into(),
+ fallback_max_weight: None
+ }
+ ]))),
+ });
+
+ assert_ok!(add_authority_xcm_msg.dispatch(origin.clone()));
+ assert_expected_events!(
+ Westend,
+ vec![
+ RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {},
+ ]
+ );
+ });
+
+ // Check events system-parachain-side
+ PeopleWestend::execute_with(|| {
+ assert_expected_events!(PeopleWestend, vec![]);
+ });
+
+ Westend::execute_with(|| {
+ type Runtime = ::Runtime;
+ type RuntimeCall = ::RuntimeCall;
+ type RuntimeEvent = ::RuntimeEvent;
+ type PeopleCall = ::RuntimeCall;
+ type PeopleRuntime = ::Runtime;
+
+ let remove_username_authority = PeopleCall::Identity(pallet_identity::Call::<
+ PeopleRuntime,
+ >::remove_username_authority {
+ authority: people_westend_runtime::MultiAddress::Id(people_westend_alice.clone()),
+ suffix: b"suffix1".into(),
+ });
+
+ Dmp::make_parachain_reachable(1004);
+
+ let remove_authority_xcm_msg =
+ RuntimeCall::XcmPallet(pallet_xcm::Call::::send {
+ dest: bx!(VersionedLocation::from(Location::new(0, [Parachain(1004)]))),
+ message: bx!(VersionedXcm::from(Xcm(vec![
+ UnpaidExecution { weight_limit: Unlimited, check_origin: None },
+ Transact {
+ origin_kind: OriginKind::SovereignAccount,
+ call: remove_username_authority.encode().into(),
+ fallback_max_weight: None,
+ }
+ ]))),
+ });
+
+ assert_ok!(remove_authority_xcm_msg.dispatch(origin));
+ assert_expected_events!(
+ Westend,
+ vec![
+ RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {},
+ ]
+ );
+ });
+
+ PeopleWestend::execute_with(|| {
+ assert_expected_events!(PeopleWestend, vec![]);
+ });
+ }
+}
diff --git a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/mod.rs b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/mod.rs
index 08749b295dc2..b9ad9e3db467 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/mod.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/people/people-westend/src/tests/mod.rs
@@ -14,4 +14,5 @@
// limitations under the License.
mod claim_assets;
+mod governance;
mod teleport;
diff --git a/cumulus/parachains/pallets/collective-content/Cargo.toml b/cumulus/parachains/pallets/collective-content/Cargo.toml
index c52021f67e36..09301bd738f3 100644
--- a/cumulus/parachains/pallets/collective-content/Cargo.toml
+++ b/cumulus/parachains/pallets/collective-content/Cargo.toml
@@ -5,6 +5,8 @@ authors = ["Parity Technologies "]
edition.workspace = true
description = "Managed content"
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/parachains/pallets/parachain-info/Cargo.toml b/cumulus/parachains/pallets/parachain-info/Cargo.toml
index e0bed23c4f8c..604441c65f29 100644
--- a/cumulus/parachains/pallets/parachain-info/Cargo.toml
+++ b/cumulus/parachains/pallets/parachain-info/Cargo.toml
@@ -5,6 +5,8 @@ name = "staging-parachain-info"
version = "0.7.0"
license = "Apache-2.0"
description = "Pallet to store the parachain ID"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/parachains/pallets/ping/Cargo.toml b/cumulus/parachains/pallets/ping/Cargo.toml
index 51fc384a4f14..ceb38f39fd80 100644
--- a/cumulus/parachains/pallets/ping/Cargo.toml
+++ b/cumulus/parachains/pallets/ping/Cargo.toml
@@ -5,6 +5,8 @@ name = "cumulus-ping"
version = "0.7.0"
license = "Apache-2.0"
description = "Ping Pallet for Cumulus XCM/UMP testing."
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
diff --git a/cumulus/parachains/pallets/ping/src/lib.rs b/cumulus/parachains/pallets/ping/src/lib.rs
index 2cf32c891fc0..b6423a81db3c 100644
--- a/cumulus/parachains/pallets/ping/src/lib.rs
+++ b/cumulus/parachains/pallets/ping/src/lib.rs
@@ -114,6 +114,7 @@ pub mod pallet {
})
.encode()
.into(),
+ fallback_max_weight: None,
}]),
) {
Ok((hash, cost)) => {
@@ -214,6 +215,7 @@ pub mod pallet {
})
.encode()
.into(),
+ fallback_max_weight: None,
}]),
) {
Ok((hash, cost)) =>
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml b/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml
index bfe8ed869758..9d1af23b40f7 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml
@@ -5,6 +5,8 @@ authors.workspace = true
edition.workspace = true
description = "Rococo variant of Asset Hub parachain runtime"
license = "Apache-2.0"
+homepage.workspace = true
+repository.workspace = true
[lints]
workspace = true
@@ -99,6 +101,7 @@ snowbridge-router-primitives = { workspace = true }
[dev-dependencies]
asset-test-utils = { workspace = true, default-features = true }
+bp-xcm-bridge-hub = { workspace = true }
parachains-runtimes-test-utils = { workspace = true, default-features = true }
[build-dependencies]
@@ -144,6 +147,7 @@ runtime-benchmarks = [
"xcm-builder/runtime-benchmarks",
"xcm-executor/runtime-benchmarks",
"xcm-runtime-apis/runtime-benchmarks",
+ "xcm/runtime-benchmarks",
]
try-runtime = [
"cumulus-pallet-aura-ext/try-runtime",
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs
index 76de887c13c0..779699338996 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs
+++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/lib.rs
@@ -934,6 +934,7 @@ impl pallet_xcm_bridge_hub_router::Config for Runtim
type DestinationVersion = PolkadotXcm;
+ // TODO:revert-for-depracated-new
// Let's use `SovereignPaidRemoteExporter`, which sends `ExportMessage` over HRMP to the sibling
// BridgeHub.
type ToBridgeHubSender = SovereignPaidRemoteExporter<
@@ -958,6 +959,15 @@ impl pallet_xcm_bridge_hub_router::Config for Runtim
type BridgeHubOrigin =
AsEnsureOriginWithArg>>;
+ // TODO:revert-for-depracated-old
+ // type BridgeHubOrigin = frame_support::traits::EitherOfDiverse<
+ // EnsureRoot,
+ // EnsureXcm>,
+ // >;
+ // type ToBridgeHubSender = XcmpQueue;
+ // type LocalXcmChannelManager =
+ // cumulus_pallet_xcmp_queue::bridging::InAndOutXcmpChannelStatusProvider;
+
// For adding message size fees
type ByteFee = xcm_config::bridging::XcmBridgeHubRouterByteFee;
// For adding message size fees
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/pallet_xcm.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/pallet_xcm.rs
index 51b6543bae82..8506125d4133 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/pallet_xcm.rs
+++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/pallet_xcm.rs
@@ -17,25 +17,27 @@
//! Autogenerated weights for `pallet_xcm`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
-//! DATE: 2024-02-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2024-12-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `runner-bn-ce5rx-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
+//! HOSTNAME: `55b2c3410882`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-rococo-dev")`, DB CACHE: 1024
// Executed Command:
// target/production/polkadot-parachain
// benchmark
// pallet
-// --steps=50
-// --repeat=20
// --extrinsic=*
+// --chain=asset-hub-rococo-dev
+// --pallet=pallet_xcm
+// --header=/__w/polkadot-sdk/polkadot-sdk/cumulus/file_header.txt
+// --output=./cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights
// --wasm-execution=compiled
+// --steps=50
+// --repeat=20
// --heap-pages=4096
-// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json
-// --pallet=pallet_xcm
-// --chain=asset-hub-rococo-dev
-// --header=./cumulus/file_header.txt
-// --output=./cumulus/parachains/runtimes/assets/asset-hub-rococo/src/weights/
+// --no-storage-info
+// --no-min-squares
+// --no-median-slopes
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
@@ -64,14 +66,16 @@ impl pallet_xcm::WeightInfo for WeightInfo {
// Proof Size summary in bytes:
// Measured: `145`
// Estimated: `3610`
- // Minimum execution time: 22_136_000 picoseconds.
- Weight::from_parts(22_518_000, 0)
+ // Minimum execution time: 28_401_000 picoseconds.
+ Weight::from_parts(29_326_000, 0)
.saturating_add(Weight::from_parts(0, 3610))
.saturating_add(T::DbWeight::get().reads(6))
.saturating_add(T::DbWeight::get().writes(2))
}
/// Storage: `ParachainInfo::ParachainId` (r:1 w:0)
/// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+ /// Storage: `PolkadotXcm::ShouldRecordXcm` (r:1 w:0)
+ /// Proof: `PolkadotXcm::ShouldRecordXcm` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
/// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0)
/// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
/// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0)
@@ -90,18 +94,20 @@ impl