diff --git a/control/.claude/skills/snowbridge-referendum/SKILL.md b/control/.claude/skills/snowbridge-referendum/SKILL.md new file mode 100644 index 000000000..4342276c7 --- /dev/null +++ b/control/.claude/skills/snowbridge-referendum/SKILL.md @@ -0,0 +1,145 @@ +--- +name: snowbridge-referendum +description: Generate a Snowbridge preimage, create opengov referendum calls, test with referenda-tester (including XCM verification on BridgeHub), and report results +disable-model-invocation: true +allowed-tools: Bash, Read, Write, Grep, Glob +argument-hint: [--track ] [--network ] +--- + +# Snowbridge Referendum Workflow + +End-to-end workflow: generate a Snowbridge governance preimage, create opengov referendum calls with opengov-cli, test them with the referenda-tester (including XCM relay verification on BridgeHub), and report results ready for on-chain submission. + +## Arguments + +- `$0`: The snowbridge-preimage subcommand (e.g. `mint-feb2026`, `upgrade-v2`, `pricing-parameters`, etc.) +- Remaining args (`$ARGUMENTS`): May include `--track` and `--network` overrides. + - `--track`: `whitelisted-caller` (default) or `root` + - `--network`: `polkadot` (default), `kusama`, `westend`, `paseo` + +## Project Locations + +- Snowbridge preimage tool: `./preimage/` (relative to this control directory) +- opengov-cli: `../../opengov-cli/` (relative to this control directory) + +## Steps + +### 1. Generate the preimage + +Run the snowbridge preimage tool: + +```bash +cd /preimage && cargo run --features -- [extra-flags] +``` + +- The `--features` flag must match the network: `polkadot`, `kusama`, `westend`, or `paseo`. +- Capture the hex output (the line starting with `0x`) from stdout. +- Capture the preimage hash and size from stderr (lines like `Preimage hash: 0x...` and `Preimage size: N`). +- Save the hex to `preimage.txt` in the opengov-cli project root. + +### 2. Run opengov-cli + +From the opengov-cli directory: + +```bash +cargo run -- submit-referendum --proposal preimage.txt --network --track --output calldata +``` + +Parse the output to extract these hex values: +- **Fellowship referendum call**: line after "Open a Fellowship referendum to whitelist the call:" (only for whitelisted-caller track) +- **Governance batch call**: line after "Batch to submit on Polkadot Asset Hub:" (or the relevant chain) +- **Collectives batch call**: line after "Batch to submit on Polkadot Collectives Chain:" (only for whitelisted-caller track) + +For `--track root`, there is no fellowship call or collectives batch. + +### 3. Test with referenda-tester + +This is the critical verification step. The referenda-tester simulates the full governance flow using Chopsticks. + +#### Determine additional chains + +If the preimage sends XCM to other chains (e.g. BridgeHub), add them via `--additional-chains`. This is essential for verifying the XCM roundtrip completes successfully. + +Common patterns: +- **Preimage contains `PolkadotXcm::send` to BridgeHub** (e.g. mint, replay, upgrade commands): add BridgeHub +- **Preimage is AH-local only** (e.g. treasury spend, register asset): no additional chains needed + +To determine this: check if the preimage tool's subcommand uses `send_xcm_bridge_hub()` in `commands.rs`. If so, BridgeHub is needed. + +#### Whitelisted-caller track (default) + +```bash +npx github:karolk91/polkadot-referenda-tester test \ + --governance-chain-url wss://asset-hub-polkadot-rpc.n.dwellir.com \ + --fellowship-chain-url wss://polkadot-collectives-rpc.polkadot.io \ + --call-to-create-governance-referendum '' \ + --call-to-create-fellowship-referendum '' \ + --additional-chains wss://bridge-hub-polkadot-rpc.n.dwellir.com \ + --verbose +``` + +#### Root track + +```bash +npx github:karolk91/polkadot-referenda-tester test \ + --governance-chain-url wss://asset-hub-polkadot-rpc.n.dwellir.com \ + --call-to-create-governance-referendum '' \ + --additional-chains wss://bridge-hub-polkadot-rpc.n.dwellir.com \ + --verbose +``` + +Omit `--fellowship-chain-url` and `--call-to-create-fellowship-referendum` for root track. +Omit `--additional-chains` if the preimage doesn't send XCM to other chains. + +#### Testnet URLs + +| Network | Asset Hub | Collectives | BridgeHub | +|---------|-----------|-------------|-----------| +| Polkadot | `wss://asset-hub-polkadot-rpc.n.dwellir.com` | `wss://polkadot-collectives-rpc.polkadot.io` | `wss://bridge-hub-polkadot-rpc.n.dwellir.com` | +| Kusama | `wss://asset-hub-kusama-rpc.n.dwellir.com` | `wss://kusama-collectives-rpc.n.dwellir.com` | `wss://bridge-hub-kusama-rpc.n.dwellir.com` | +| Westend | `wss://asset-hub-westend-rpc.n.dwellir.com` | `wss://westend-collectives-rpc.n.dwellir.com` | `wss://bridge-hub-westend-rpc.n.dwellir.com` | + +### 4. Verify the referenda-tester output + +Check the output for these success indicators: + +#### Governance dispatch +- `Both referenda executed successfully!` (or single referendum for root track) +- `Scheduler.Dispatched` with `result: success` +- `Whitelist.WhitelistedCallDispatched` with `result: success` (whitelisted-caller track) + +#### XCM to BridgeHub (if applicable) +- `PolkadotXcm.Sent` with destination `Parachain: 1002` (BridgeHub) +- `XcmpQueue.XcmpMessageSent` on Asset Hub +- Outbound HRMP message to recipient `1002` in the Chopsticks logs + +#### BridgeHub processing (if additional chain added) +- `MessageQueue.Processed` with `origin: Sibling(1000)` and `success: true` +- `PolkadotXcm.Sent` from BridgeHub back to AH (destination `Parachain: 1000`) +- `XcmpQueue.XcmpMessageSent` on BridgeHub +- Outbound HRMP message to recipient `1000` in the Chopsticks logs + +For commands that mint/deposit assets (e.g. `mint-feb2026`, `replay-sep2025`), verify the return XCM contains: +- `ReserveAssetDeposited` with the correct asset and amount +- `DepositAsset` with the correct beneficiary +- The asset location should be the expected foreign asset (e.g. Ethereum ERC20) + +#### Failure investigation +If the test fails: +- Check `Scheduler.Dispatched` result for errors +- Look for `XcmpQueue.Fail` or `MessageQueue.ProcessingFailed` events +- Check BridgeHub events for `Transact` failures +- Inspect the Chopsticks `outboundHrmpMessage` logs to see if XCM was sent + +### 5. Report results + +Print a summary including: +- Preimage hash and size +- Whether all referenda passed +- Whether XCM roundtrip completed (if applicable) +- The final call data for posting: + - Governance batch (submit on Asset Hub) + - Collectives batch (submit on Collectives, whitelisted-caller only) +- Any issues found during testing + +If everything passes, the calls are ready for on-chain submission. diff --git a/control/preimage/src/commands.rs b/control/preimage/src/commands.rs index 1bf8bfb9c..dd22dded8 100644 --- a/control/preimage/src/commands.rs +++ b/control/preimage/src/commands.rs @@ -861,7 +861,7 @@ pub fn replay_sep_2025_xcm() -> crate::asset_hub_runtime::RuntimeCall { Instruction::*, Xcm, }, - xcm::{VersionedLocation, VersionedXcm, v3::WeightLimit}, + xcm::{v3::WeightLimit, VersionedLocation, VersionedXcm}, }; use hex_literal::hex; @@ -916,12 +916,10 @@ pub fn replay_sep_2025_xcm() -> crate::asset_hub_runtime::RuntimeCall { ), ]; - let mut all_instructions = vec![ - UnpaidExecution { - weight_limit: WeightLimit::Unlimited, - check_origin: None, - }, - ]; + let mut all_instructions = vec![UnpaidExecution { + weight_limit: WeightLimit::Unlimited, + check_origin: None, + }]; // Add all failed messages as separate ExportMessage instructions for (asset_type, amount, beneficiary_address, topic) in failed_messages.iter() { @@ -973,14 +971,102 @@ pub fn replay_sep_2025_xcm() -> crate::asset_hub_runtime::RuntimeCall { all_instructions.push(SetTopic(*topic)); } - let asset_hub_xcm = crate::asset_hub_runtime::RuntimeCall::PolkadotXcm(pallet_xcm::pallet::Call::send { + let asset_hub_xcm = + crate::asset_hub_runtime::RuntimeCall::PolkadotXcm(pallet_xcm::pallet::Call::send { + dest: Box::new(VersionedLocation::V5(Location { + parents: 1, + interior: Junctions::X1([Junction::Parachain(crate::constants::BRIDGE_HUB_ID)]), + })), + message: Box::new(VersionedXcm::V5(Xcm(all_instructions))), + }); + asset_hub_xcm +} + +/// Mint refund for a failed Hydration→Ethereum USDT transfer (Feb 2026). +/// +/// Transaction: 0xcce3ccdd216ad59c2c602987fe7e8e77ab68dbe83a4555dff630ea346a512c2a +/// The transfer failed on BridgeHub and the user's USDT was burnt on AssetHub. +/// This sends XCM from BridgeHub→AssetHub with ReserveAssetDeposited to mint +/// the USDT back to the beneficiary. +pub fn mint_feb_2026_xcm() -> BridgeHubRuntimeCall { + use crate::bridge_hub_runtime::runtime_types::{ + pallet_xcm, + staging_xcm::v5::{ + asset::{Asset, AssetFilter, AssetId, Assets, Fungibility, WildAsset}, + junction::Junction, + junctions::Junctions, + location::Location, + Instruction::*, + Xcm, + }, + xcm::{v3::WeightLimit, VersionedLocation, VersionedXcm}, + }; + use hex_literal::hex; + + // USDT (Tether) ERC20 on Ethereum Mainnet + let usdt_address: [u8; 20] = hex!("dac17f958d2ee523a2206206994597c13d831ec7"); + // 499.739459 USDT (6 decimals) - exact on-chain amount from extrinsic 11369277-3 + let usdt_amount: u128 = 499_739_459; + + // Beneficiary: 16AQJHpSRMh5X1mULm4dCgYxrQLsrnK3uwCQ436iitYk1ru7 (Hydration sender) + let beneficiary: [u8; 32] = + hex!("e458cde73940bd29d637face28de378dfb933f21734cfb1d24a0edfb4b81f31c"); + + // USDT location: Ethereum ERC20 foreign asset + let usdt_location = Location { + parents: 2, + interior: Junctions::X2([ + Junction::GlobalConsensus( + crate::bridge_hub_runtime::runtime_types::staging_xcm::v5::junction::NetworkId::Ethereum { + chain_id: crate::bridge_hub_runtime::CHAIN_ID, + }, + ), + Junction::AccountKey20 { + network: None, + key: usdt_address, + }, + ]), + }; + + // XCM message from BridgeHub to AssetHub: + // BridgeHub is the reserve for Ethereum-bridged assets, so ReserveAssetDeposited + // will mint the USDT on AssetHub. + let instructions = vec![ + ReserveAssetDeposited(Assets(vec![Asset { + id: AssetId(usdt_location.clone()), + fun: Fungibility::Fungible(usdt_amount), + }])), + ClearOrigin, + BuyExecution { + fees: Asset { + id: AssetId(usdt_location), + fun: Fungibility::Fungible(usdt_amount), + }, + weight_limit: WeightLimit::Unlimited, + }, + DepositAsset { + assets: AssetFilter::Wild(WildAsset::AllCounted(1)), + beneficiary: Location { + parents: 0, + interior: Junctions::X1([Junction::AccountId32 { + network: None, + id: beneficiary, + }]), + }, + }, + SetTopic(hex!( + "cce3ccdd216ad59c2c602987fe7e8e77ab68dbe83a4555dff630ea346a512c2a" + )), + ]; + + // BridgeHub sends XCM to AssetHub via pallet_xcm::send + BridgeHubRuntimeCall::PolkadotXcm(pallet_xcm::pallet::Call::send { dest: Box::new(VersionedLocation::V5(Location { parents: 1, - interior: Junctions::X1([Junction::Parachain(crate::constants::BRIDGE_HUB_ID)]), + interior: Junctions::X1([Junction::Parachain(crate::constants::ASSET_HUB_ID)]), })), - message: Box::new(VersionedXcm::V5(Xcm(all_instructions))), - }); - asset_hub_xcm + message: Box::new(VersionedXcm::V5(Xcm(instructions))), + }) } #[cfg(feature = "polkadot")] diff --git a/control/preimage/src/helpers.rs b/control/preimage/src/helpers.rs index fb0298b41..361b063ec 100644 --- a/control/preimage/src/helpers.rs +++ b/control/preimage/src/helpers.rs @@ -2,12 +2,12 @@ use bridge_hub_runtime::ethereum_system::storage::types::pricing_parameters::Pri use codec::Encode; use subxt::{utils::H160, utils::H256, OnlineClient, PolkadotConfig}; -use crate::constants::{ASSET_HUB_ID, BRIDGE_HUB_ID}; +use crate::constants::BRIDGE_HUB_ID; use crate::Context; use crate::bridge_hub_runtime::{self, RuntimeCall as BridgeHubRuntimeCall}; -use crate::relay_runtime::runtime_types::{ +use crate::asset_hub_runtime::runtime_types::{ pallet_xcm, sp_weights::weight_v2::Weight, staging_xcm::v5::{ @@ -23,7 +23,6 @@ use crate::relay_runtime::runtime_types::{ }; use crate::asset_hub_runtime::RuntimeCall as AssetHubRuntimeCall; -use crate::relay_runtime::RuntimeCall as RelayRuntimeCall; use bridge_hub_runtime::runtime_types::snowbridge_outbound_queue_primitives::v1::message::{ AgentExecuteCommand, Command, Fee, @@ -51,7 +50,7 @@ pub fn increase_weight(ref_time: &mut u64, proof_size: &mut u64) { pub async fn send_xcm_bridge_hub( context: &Context, calls: Vec, -) -> Result> { +) -> Result> { let mut accum: Vec<(u64, u64, Vec)> = vec![]; for call in calls.iter() { @@ -80,9 +79,9 @@ pub async fn send_xcm_bridge_hub( ]); } - let call = RelayRuntimeCall::XcmPallet(pallet_xcm::pallet::Call::send { + let call = AssetHubRuntimeCall::PolkadotXcm(pallet_xcm::pallet::Call::send { dest: Box::new(VersionedLocation::V5(Location { - parents: 0, + parents: 1, interior: Junctions::X1([Junction::Parachain(BRIDGE_HUB_ID)]), })), message: Box::new(VersionedXcm::V5(Xcm(instructions))), @@ -92,46 +91,14 @@ pub async fn send_xcm_bridge_hub( } pub async fn send_xcm_asset_hub( - context: &Context, + _context: &Context, calls: Vec, -) -> Result> { - let mut accum: Vec<(u64, u64, Vec)> = vec![]; - - for call in calls.iter() { - let (mut ref_time, mut proof_size) = - query_weight_asset_hub(&context.asset_hub_api, call.clone()).await?; - increase_weight(&mut ref_time, &mut proof_size); - accum.push((ref_time, proof_size, call.encode())); +) -> Result> { + if calls.len() == 1 { + Ok(calls.into_iter().next().unwrap()) + } else { + Ok(utility_force_batch(calls)) } - - let mut instructions: Vec = vec![UnpaidExecution { - weight_limit: WeightLimit::Unlimited, - check_origin: None, - }]; - - for (ref_time, proof_size, encoded) in accum.into_iter() { - instructions.append(&mut vec![ - Transact { - origin_kind: OriginKind::Superuser, - fallback_max_weight: Some(Weight { - ref_time: ref_time, - proof_size: proof_size, - }), - call: DoubleEncoded { encoded }, - }, - ExpectTransactStatus(MaybeErrorCode::Success), - ]); - } - - let call = RelayRuntimeCall::XcmPallet(pallet_xcm::pallet::Call::send { - dest: Box::new(VersionedLocation::V5(Location { - parents: 0, - interior: Junctions::X1([Junction::Parachain(ASSET_HUB_ID)]), - })), - message: Box::new(VersionedXcm::V5(Xcm(instructions))), - }); - - Ok(call) } pub async fn query_weight_bridge_hub( @@ -150,6 +117,7 @@ pub async fn query_weight_bridge_hub( Ok((call_info.weight.ref_time, call_info.weight.proof_size)) } +#[allow(dead_code)] pub async fn query_weight_asset_hub( api: &OnlineClient, call: AssetHubRuntimeCall, @@ -166,16 +134,16 @@ pub async fn query_weight_asset_hub( Ok((call_info.weight.ref_time, call_info.weight.proof_size)) } -pub fn utility_force_batch(calls: Vec) -> RelayRuntimeCall { - RelayRuntimeCall::Utility( - crate::relay_runtime::runtime_types::pallet_utility::pallet::Call::batch_all { calls }, +pub fn utility_force_batch(calls: Vec) -> AssetHubRuntimeCall { + AssetHubRuntimeCall::Utility( + crate::asset_hub_runtime::runtime_types::pallet_utility::pallet::Call::batch_all { calls }, ) } #[cfg(any(feature = "westend", feature = "paseo"))] -pub fn sudo(call: Box) -> RelayRuntimeCall { - return RelayRuntimeCall::Sudo( - crate::relay_runtime::runtime_types::pallet_sudo::pallet::Call::sudo { call }, +pub fn sudo(call: Box) -> AssetHubRuntimeCall { + return AssetHubRuntimeCall::Sudo( + crate::asset_hub_runtime::runtime_types::pallet_sudo::pallet::Call::sudo { call }, ); } diff --git a/control/preimage/src/main.rs b/control/preimage/src/main.rs index 6130c1313..e0203e216 100644 --- a/control/preimage/src/main.rs +++ b/control/preimage/src/main.rs @@ -3,6 +3,7 @@ mod bridge_hub_runtime; mod commands; mod constants; mod helpers; +#[allow(unused)] mod relay_runtime; mod treasury_commands; @@ -68,6 +69,8 @@ pub enum Command { UpgradeV2, /// Replay failed XCM messages from September 2025 ReplaySep2025, + /// Mint refund for failed Hydration→Ethereum transfer (Feb 2026) + MintFeb2026, /// Set BridgeHubEthereumBaseFeeV2 on Paseo SetPaseoFeeV2, } @@ -309,7 +312,7 @@ pub enum Format { struct Context { bridge_hub_api: Box>, - asset_hub_api: Box>, + _asset_hub_api: Box>, _relay_api: Box>, } @@ -342,7 +345,7 @@ async fn run() -> Result<(), Box> { let context = Context { bridge_hub_api: Box::new(bridge_hub_api), - asset_hub_api: Box::new(asset_hub_api), + _asset_hub_api: Box::new(asset_hub_api), _relay_api: Box::new(relay_api), }; @@ -534,6 +537,10 @@ async fn run() -> Result<(), Box> { let asset_hub_call = commands::replay_sep_2025_xcm(); send_xcm_asset_hub(&context, vec![asset_hub_call]).await? } + Command::MintFeb2026 => { + let bridge_hub_call = commands::mint_feb_2026_xcm(); + send_xcm_bridge_hub(&context, vec![bridge_hub_call]).await? + } Command::SetPaseoFeeV2 => { #[cfg(not(feature = "paseo"))] panic!("SetPaseoFeeV2 only for paseo runtime."); diff --git a/control/preimage/src/treasury_commands.rs b/control/preimage/src/treasury_commands.rs index 488b8fbc3..5329fcc22 100644 --- a/control/preimage/src/treasury_commands.rs +++ b/control/preimage/src/treasury_commands.rs @@ -1,15 +1,15 @@ -use crate::{constants::*, TreasuryProposal2024Args}; +use crate::TreasuryProposal2024Args; -use crate::helpers::utility_force_batch; -use crate::relay_runtime::runtime_types::{ +use crate::asset_hub_runtime::runtime_types::{ pallet_treasury, + parachains_common::pay::VersionedLocatableAccount, polkadot_runtime_common::impls::VersionedLocatableAsset, staging_xcm::v5::{ asset::AssetId, junction::Junction, junctions::Junctions, location::Location, }, - xcm::VersionedLocation, }; -use crate::relay_runtime::RuntimeCall as RelayRuntimeCall; +use crate::asset_hub_runtime::RuntimeCall as AssetHubRuntimeCall; +use crate::helpers::utility_force_batch; use polkadot_runtime_constants::currency::UNITS; use polkadot_runtime_constants::time::DAYS; @@ -174,8 +174,8 @@ const SPENDS: [Spend; 23] = [ pub const LAUNCH_BLOCK: u32 = 21292000; -pub fn treasury_proposal(params: &TreasuryProposal2024Args) -> RelayRuntimeCall { - let mut calls: Vec = vec![]; +pub fn treasury_proposal(params: &TreasuryProposal2024Args) -> AssetHubRuntimeCall { + let mut calls: Vec = vec![]; for spend in SPENDS.iter() { let (asset_id, asset_location, asset_amount) = spend.asset.into(); @@ -197,22 +197,28 @@ fn make_treasury_spend( asset: Location, amount: u128, valid_from: Option, -) -> RelayRuntimeCall { - let call = RelayRuntimeCall::Treasury(pallet_treasury::pallet::Call::spend { +) -> AssetHubRuntimeCall { + let call = AssetHubRuntimeCall::Treasury(pallet_treasury::pallet::Call::spend { asset_kind: Box::new(VersionedLocatableAsset::V5 { location: Location { parents: 0, - interior: Junctions::X1([Junction::Parachain(ASSET_HUB_ID)]), + interior: Junctions::Here, }, asset_id: AssetId(asset), }), - beneficiary: Box::new(VersionedLocation::V5(Location { - parents: 0, - interior: Junctions::X1([Junction::AccountId32 { - network: None, - id: beneficiary, - }]), - })), + beneficiary: Box::new(VersionedLocatableAccount::V5 { + location: Location { + parents: 0, + interior: Junctions::Here, + }, + account_id: Location { + parents: 0, + interior: Junctions::X1([Junction::AccountId32 { + network: None, + id: beneficiary, + }]), + }, + }), amount, valid_from, }); diff --git a/control/runtimes/asset-hub-kusama/asset-hub-metadata.bin b/control/runtimes/asset-hub-kusama/asset-hub-metadata.bin index 7e23034eb..92c0b929f 100644 Binary files a/control/runtimes/asset-hub-kusama/asset-hub-metadata.bin and b/control/runtimes/asset-hub-kusama/asset-hub-metadata.bin differ diff --git a/control/runtimes/asset-hub-paseo/asset-hub-metadata.bin b/control/runtimes/asset-hub-paseo/asset-hub-metadata.bin index 3293fab23..86306431a 100644 Binary files a/control/runtimes/asset-hub-paseo/asset-hub-metadata.bin and b/control/runtimes/asset-hub-paseo/asset-hub-metadata.bin differ diff --git a/control/runtimes/asset-hub-polkadot/asset-hub-metadata.bin b/control/runtimes/asset-hub-polkadot/asset-hub-metadata.bin index c092a1e8a..7debbba65 100644 Binary files a/control/runtimes/asset-hub-polkadot/asset-hub-metadata.bin and b/control/runtimes/asset-hub-polkadot/asset-hub-metadata.bin differ diff --git a/control/runtimes/asset-hub-polkadot/src/lib.rs b/control/runtimes/asset-hub-polkadot/src/lib.rs index 2a1543bba..300667c6b 100644 --- a/control/runtimes/asset-hub-polkadot/src/lib.rs +++ b/control/runtimes/asset-hub-polkadot/src/lib.rs @@ -10,6 +10,10 @@ path = "sp_arithmetic::per_things::Perbill", derive = "codec::CompactAs" ), + derive_for_type( + path = "sp_arithmetic::per_things::PerU16", + derive = "codec::CompactAs" + ), derive_for_type( path = "polkadot_parachain_primitives::primitives::Id", derive = "codec::CompactAs" diff --git a/control/runtimes/asset-hub-westend/asset-hub-metadata.bin b/control/runtimes/asset-hub-westend/asset-hub-metadata.bin index ff4f61075..3e814618e 100644 Binary files a/control/runtimes/asset-hub-westend/asset-hub-metadata.bin and b/control/runtimes/asset-hub-westend/asset-hub-metadata.bin differ diff --git a/control/runtimes/bridge-hub-kusama/bridge-hub-metadata.bin b/control/runtimes/bridge-hub-kusama/bridge-hub-metadata.bin index 3bfa86d2c..89cde4633 100644 Binary files a/control/runtimes/bridge-hub-kusama/bridge-hub-metadata.bin and b/control/runtimes/bridge-hub-kusama/bridge-hub-metadata.bin differ diff --git a/control/runtimes/bridge-hub-paseo/bridge-hub-metadata.bin b/control/runtimes/bridge-hub-paseo/bridge-hub-metadata.bin index 9c818040c..6a7909750 100644 Binary files a/control/runtimes/bridge-hub-paseo/bridge-hub-metadata.bin and b/control/runtimes/bridge-hub-paseo/bridge-hub-metadata.bin differ diff --git a/control/runtimes/bridge-hub-polkadot/bridge-hub-metadata.bin b/control/runtimes/bridge-hub-polkadot/bridge-hub-metadata.bin index 1212e895d..5b3b6a1c6 100644 Binary files a/control/runtimes/bridge-hub-polkadot/bridge-hub-metadata.bin and b/control/runtimes/bridge-hub-polkadot/bridge-hub-metadata.bin differ diff --git a/control/runtimes/bridge-hub-westend/bridge-hub-metadata.bin b/control/runtimes/bridge-hub-westend/bridge-hub-metadata.bin index 8fe101a36..c994f0cf8 100644 Binary files a/control/runtimes/bridge-hub-westend/bridge-hub-metadata.bin and b/control/runtimes/bridge-hub-westend/bridge-hub-metadata.bin differ diff --git a/control/runtimes/kusama/polkadot-metadata.bin b/control/runtimes/kusama/polkadot-metadata.bin index c4cc9c832..74bc9e55f 100644 Binary files a/control/runtimes/kusama/polkadot-metadata.bin and b/control/runtimes/kusama/polkadot-metadata.bin differ diff --git a/control/runtimes/paseo/polkadot-metadata.bin b/control/runtimes/paseo/polkadot-metadata.bin index e5020e9e2..01dda0f2b 100644 Binary files a/control/runtimes/paseo/polkadot-metadata.bin and b/control/runtimes/paseo/polkadot-metadata.bin differ diff --git a/control/runtimes/polkadot/polkadot-metadata.bin b/control/runtimes/polkadot/polkadot-metadata.bin index f4cd73a8a..c1e193743 100644 Binary files a/control/runtimes/polkadot/polkadot-metadata.bin and b/control/runtimes/polkadot/polkadot-metadata.bin differ diff --git a/control/runtimes/westend/polkadot-metadata.bin b/control/runtimes/westend/polkadot-metadata.bin index 4fbfcaacb..ffc424d54 100644 Binary files a/control/runtimes/westend/polkadot-metadata.bin and b/control/runtimes/westend/polkadot-metadata.bin differ diff --git a/control/update-runtimes.sh b/control/update-runtimes.sh index 85bf95e5f..00d52961f 100755 --- a/control/update-runtimes.sh +++ b/control/update-runtimes.sh @@ -8,11 +8,11 @@ networks=( for network in ${networks[@]}; do echo "Updating network $network" - subxt metadata --url wss://$network-rpc.dwellir.com -f bytes -o runtimes/$network/polkadot-metadata.bin - subxt metadata --url wss://asset-hub-$network-rpc.dwellir.com -f bytes -o runtimes/asset-hub-$network/asset-hub-metadata.bin + subxt metadata --url wss://$network-rpc.n.dwellir.com -f bytes -o runtimes/$network/polkadot-metadata.bin + subxt metadata --url wss://asset-hub-$network-rpc.n.dwellir.com -f bytes -o runtimes/asset-hub-$network/asset-hub-metadata.bin bh_metadata=runtimes/bridge-hub-$network/bridge-hub-metadata.bin - bh_url=wss://bridge-hub-$network-rpc.dwellir.com + bh_url=wss://bridge-hub-$network-rpc.n.dwellir.com if [ "$network" = "paseo" ]; then bh_url=wss://bridge-hub-paseo.dotters.network fi