diff --git a/.gitignore b/.gitignore index 3f43d7ed4..db69c3df7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ __pycache__ .pytest_cache allure-results +.idea diff --git a/chains/v17/chains.json b/chains/v17/chains.json index e42502273..6106c672d 100644 --- a/chains/v17/chains.json +++ b/chains/v17/chains.json @@ -3892,7 +3892,10 @@ "addressPrefix": 32, "options": [ "governance-v1" - ] + ], + "additional": { + "feeViaRuntimeCall": true + } }, { "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", diff --git a/scripts/utils/chain_model.py b/scripts/utils/chain_model.py index d6e88463f..0c915f7bd 100644 --- a/scripts/utils/chain_model.py +++ b/scripts/utils/chain_model.py @@ -1,17 +1,31 @@ -from .substrate_interface import create_connection_by_url -from .metadata_interaction import get_properties +from __future__ import annotations + +from abc import ABC, abstractmethod +from typing import List, Callable, TypeVar, Tuple +from scalecodec import ScaleBytes from substrateinterface import SubstrateInterface +from .metadata_interaction import get_properties +from .substrate_interface import create_connection_by_url + +T = TypeVar('T') + class Chain(): - substrate: SubstrateInterface + substrate: SubstrateInterface | None + + assets: List[ChainAsset] + + _type_registry: dict - def __init__(self, arg): + _type_cache: dict = {} + + def __init__(self, arg, type_registry=None): self.chainId = arg.get("chainId") self.parentId = arg.get("parentId") self.name = arg.get("name") - self.assets = arg.get("assets") + self.assets = [ChainAsset(data, self, self._type_cache) for data in arg.get("assets")] self.nodes = arg.get("nodes") self.explorers = arg.get("explorers") self.addressPrefix = arg.get("addressPrefix") @@ -20,26 +34,210 @@ def __init__(self, arg): self.substrate = None self.properties = None + self._type_registry = type_registry + def create_connection(self) -> SubstrateInterface: + def create_node_connection(node_url: str): + self.substrate = create_connection_by_url(node_url, type_registry=self._type_registry) + + self._try_connect_over_all_nodes(create_node_connection) + + return self.substrate + + def recreate_connection(self) -> SubstrateInterface: + if self.substrate is None: + raise Exception("No connection was created before") + + def recreate_node_connection(node_url: str): + self.substrate.url = node_url + self.substrate.connect_websocket() + + self._try_connect_over_all_nodes(recreate_node_connection) + + return self.substrate + + def _try_connect_over_all_nodes(self, connect_to_node: Callable[[str], None]): for node in self.nodes: + node_url = node.get('url') + try: - self.substrate = create_connection_by_url(node.get('url')) - return self.substrate - # if self.substrate.websocket.connected is True: - # return self.substrate - # print(f"Can't connect to endpoint {node.get('url')} for the {self.name}") + print("Connecting to ", node_url) + connect_to_node(node_url) + print("Connected to ", node_url) + return except: - print("Can't connect to that node") + print("Can't connect to", node_url) continue - print("Can't connect to all nodes of network", self.name) - + raise Exception("Can't connect to all nodes of network") def close_substrate_connection(self): self.substrate.close() - + self.substrate = None def init_properties(self): if (self.properties): - return self.substrate + return self.substrate self.properties = get_properties(self.substrate) + + def has_evm_addresses(self): + return self.options is not None and "ethereumBased" in self.options + + def get_asset_by_symbol(self, symbol: str) -> ChainAsset: + return next((a for a in self.assets if a.symbol == symbol)) + + def get_asset_by_id(self, id: int) -> ChainAsset: + return next((a for a in self.assets if a.id == id)) + + def get_utility_asset(self) -> ChainAsset: + return self.get_asset_by_id(0) + + def access_substrate(self, action: Callable[[SubstrateInterface], T]) -> T: + if self.substrate is None: + self.create_connection() + + try: + return action(self.substrate) + except Exception as e: + print("Attempting to re-create connection after receiving error", e) + # try re-connecting socket and performing action once again + self.recreate_connection() + return action(self.substrate) + + +class ChainAsset: + _data: dict + + symbol: str + type: AssetType + precision: int + + id: int + + chain: Chain + + def __init__(self, data: dict, chain: Chain, chain_cache: dict): + self._data = data + + self.id = data["assetId"] + self.symbol = data["symbol"] + self.type = self._construct_type(data, chain, chain_cache) + self.precision = data["precision"] + self.chain = chain + + # Backward-compatible override for code that still thinks this is a dict + def __getitem__(self, item): + return self._data[item] + + def unified_symbol(self) -> str: + return self.symbol.removeprefix("xc") + + def planks(self, amount: int | float) -> int: + return int(amount * 10 ** self.precision) + + def amount(self, planks: int) -> float: + return planks / 10 ** self.precision + + def full_chain_asset_id(self) -> Tuple[str, int]: + return self.chain.chainId, self.id + + @staticmethod + def _construct_type(data: dict, chain: Chain, chain_cache: dict) -> AssetType: + type_label = data.get("type", "native") + type_extras = data.get("typeExtras", {}) + + match type_label: + case "native": + return NativeAssetType() + case "statemine": + return StatemineAssetType(type_extras) + case "orml": + return OrmlAssetType(type_extras, chain, chain_cache) + case _: + return UnsupportedAssetType() + + +class AssetType(ABC): + + @abstractmethod + def encodable_asset_id(self) -> object | None: + pass + + +class NativeAssetType(AssetType): + + def encodable_asset_id(self): + return None + + +class UnsupportedAssetType(AssetType): + + def encodable_asset_id(self) -> object | None: + raise Exception("Unsupported") + + +class StatemineAssetType(AssetType): + _pallet_name: str + _asset_id: str + + def __init__(self, type_extras: dict): + self._pallet_name = type_extras.get("palletName", "Assets") + self._asset_id = type_extras["assetId"] + + def pallet_name(self) -> str: + return self._pallet_name + + def encodable_asset_id(self) -> object | None: + if self._asset_id.startswith("0x"): + return ScaleBytes(self._asset_id) + else: + return int(self._asset_id) + + +_orml_pallet_candidates = ["Tokens", "Currencies"] +_orml_pallet_cache_key = "orml_pallet_name" + + +class OrmlAssetType(AssetType): + _asset_id: str + _asset_type_scale: str + + _chain: Chain + + _chain_cache: dict + + def __init__(self, type_extras: dict, chain: Chain, chain_cache: dict): + self._asset_id = type_extras["currencyIdScale"] + self._asset_type_scale = type_extras["currencyIdType"].replace(".", "::") + self._chain = chain + self._chain_cache = chain_cache + + def encodable_asset_id(self) -> object | None: + return self._chain.access_substrate( + lambda s: self.__create_encodable_id(s) + ) + + def __create_encodable_id(self, substrate: SubstrateInterface): + encoded_bytes = ScaleBytes(self._asset_id) + + return substrate.create_scale_object(self._asset_type_scale, encoded_bytes).process() + + def pallet_name(self) -> str: + if self._chain_cache.get(_orml_pallet_cache_key) is None: + self._chain_cache[_orml_pallet_cache_key] = self.__determine_pallet_name() + + return self._chain_cache[_orml_pallet_cache_key] + + def __determine_pallet_name(self) -> str: + return self._chain.access_substrate( + lambda s: self.__determine_pallet_name_using_connection(s) + ) + + @staticmethod + def __determine_pallet_name_using_connection(substrate: SubstrateInterface) -> str: + for candidate in _orml_pallet_candidates: + module = substrate.get_metadata_module(candidate) + if module is not None: + return candidate + + raise Exception(f"Failed to find orml pallet name, searched for {_orml_pallet_candidates}") diff --git a/scripts/utils/substrate_interface.py b/scripts/utils/substrate_interface.py index fd1dcf657..e61dba6ed 100644 --- a/scripts/utils/substrate_interface.py +++ b/scripts/utils/substrate_interface.py @@ -13,7 +13,7 @@ "headers": {"Origin": "polkadot.js.org"} } -def create_connection_by_url(url, use_remote_preset=False, ws_otpions=default_ws_options) -> SubstrateInterface: +def create_connection_by_url(url, use_remote_preset=False, ws_otpions=default_ws_options, type_registry=None) -> SubstrateInterface: """Returns substrate interface object Args: @@ -28,7 +28,8 @@ def create_connection_by_url(url, use_remote_preset=False, ws_otpions=default_ws """ try: substrate = SubstrateInterface( - url=url, use_remote_preset=use_remote_preset, ws_options=ws_otpions + url=url, use_remote_preset=use_remote_preset, ws_options=ws_otpions, + type_registry=type_registry ) except Exception as err: print(f"⚠️ Can't connect by {url}, check it is available? \n {err}") diff --git a/scripts/xcm_transfers/__init__.py b/scripts/xcm_transfers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/xcm_transfers/construct_dynamic_config_base.py b/scripts/xcm_transfers/construct_dynamic_config_base.py new file mode 100644 index 000000000..53f2b21e2 --- /dev/null +++ b/scripts/xcm_transfers/construct_dynamic_config_base.py @@ -0,0 +1,44 @@ +import json + +from scripts.utils.work_with_data import get_data_from_file, write_data_to_file +from scripts.xcm_transfers.utils.xcm_config_files import XCMConfigFiles +from scripts.xcm_transfers.xcm.registry.xcm_registry_builder import build_polkadot_xcm_registry + +config_files = XCMConfigFiles( + chains="../../chains/v21/chains_dev.json", + xcm_legacy_config="../../xcm/v7/transfers_dev.json", + xcm_additional_data="xcm_registry_additional_data.json", + xcm_dynamic_config="../../xcm/v7/transfers_dynamic_dev.json", +) + +registry = build_polkadot_xcm_registry(config_files) + +config = get_data_from_file(config_files.xcm_legacy_config) + +new_config = {"assetsLocation": {}} + +for reserve_id, reserve_config in config["assetsLocation"].items(): + reserve_config.pop("reserveFee", None) + new_config["assetsLocation"][reserve_id] = reserve_config + +reserve_overrides = registry.reserves.dump_overrides() + +# Remove redundant declarations from overrides +for chain_id, chain_overrides in list(reserve_overrides.items()): + chain = registry.get_chain_or_none(chain_id) + + if chain is None: + del reserve_overrides[chain_id] + continue + + for asset_id, reserve_id in list(chain_overrides.items()): + asset = chain.chain.get_asset_by_id(asset_id) + if asset.symbol == reserve_id: + del chain_overrides[asset_id] + + if len(chain_overrides) == 0: + del reserve_overrides[chain_id] + +new_config["reserveIdOverrides"] = reserve_overrides + +write_data_to_file("../../xcm/v7/transfers_dynamic_dev.json", json.dumps(new_config, indent=2)) diff --git a/scripts/xcm_transfers/find_working_directions.py b/scripts/xcm_transfers/find_working_directions.py new file mode 100644 index 000000000..2ddc844f1 --- /dev/null +++ b/scripts/xcm_transfers/find_working_directions.py @@ -0,0 +1,99 @@ +import json +from collections import defaultdict +from dataclasses import dataclass +from typing import List + +from scripts.utils.work_with_data import get_data_from_file, write_data_to_file +from scripts.xcm_transfers.utils.xcm_config_files import XCMConfigFiles +from scripts.xcm_transfers.xcm.dry_run.dry_run_transfer import TransferDryRunner, DryRunTransferResult +from scripts.xcm_transfers.xcm.graph.xcm_connectivity_graph import XcmChainConnectivityGraph +from scripts.xcm_transfers.xcm.registry.xcm_registry_builder import build_polkadot_xcm_registry +from scripts.xcm_transfers.xcm.xcm_transfer_direction import XcmTransferDirection + +config_files = XCMConfigFiles( + chains="../../chains/v21/chains_dev.json", + xcm_legacy_config="../../xcm/v7/transfers_dev.json", + xcm_additional_data="xcm_registry_additional_data.json", + xcm_dynamic_config="../../xcm/v7/transfers_dynamic_dev.json", +) + +registry = build_polkadot_xcm_registry(config_files) +connectivity_graph = XcmChainConnectivityGraph.construct_default(registry) +transfers_runner = TransferDryRunner(registry) + +potential_directions = connectivity_graph.construct_potential_directions() + +passed = [] +failed = [] + +dynamic_config: dict = get_data_from_file(config_files.xcm_dynamic_config) + +@dataclass +class WorkingDirection: + direction: XcmTransferDirection + dry_run_result: DryRunTransferResult + +transfers_dict: dict[str, dict[int, List[WorkingDirection]]] = defaultdict(lambda : defaultdict(list)) + +dynamic_config.pop("chains", None) + +def save_config(): + transfers_in_config_format = [] + + for chain_id, chain_transfers in transfers_dict.items(): + assets = [] + + for asset_id, working_directions in chain_transfers.items(): + asset_transfers = [] + + for working_direction in working_directions: + origin_asset = working_direction.direction.origin_asset + destination_asset = working_direction.direction.destination_asset + execution_fee_in_origin_planks = origin_asset.planks(working_direction.dry_run_result.execution_fee) + + destination_config = { + "chainId": destination_asset.chain.chainId, + "assetId": destination_asset.id, + "execution_fee": execution_fee_in_origin_planks + } + asset_transfers.append(destination_config) + + asset_config = { + "assetId": asset_id, + "xcmTransfers": asset_transfers + } + assets.append(asset_config) + + chain_config = { + "chainId": chain_id, + "assets": assets + } + + transfers_in_config_format.append(chain_config) + + dynamic_config["chains"] = transfers_in_config_format + write_data_to_file(config_files.xcm_dynamic_config, json.dumps(dynamic_config, indent=2)) + + +for idx, potential_direction in enumerate(potential_directions): + try: + print(f"{idx+1}/{len(potential_directions)}. Checking {potential_direction}") + result = transfers_runner.dry_run_transfer(potential_direction) + passed.append(potential_direction) + + working_direction = WorkingDirection(potential_direction, result) + + chain_transfers = transfers_dict[potential_direction.origin_chain.chain.chainId] + asset_transfers = chain_transfers[potential_direction.origin_asset.id] + asset_transfers.append(working_direction) + save_config() + + print("Result: Success") + except Exception as exception: + failed.append(potential_direction) + print(f"Result: Failure {exception}") + + + +print(f"Passed ({len(passed)}): {passed}") +print(f"Failed ({len(failed)}): {failed}") diff --git a/scripts/xcm_transfers/sync_xcm_preliminary_data.py b/scripts/xcm_transfers/sync_xcm_preliminary_data.py new file mode 100644 index 000000000..a85a41230 --- /dev/null +++ b/scripts/xcm_transfers/sync_xcm_preliminary_data.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +import json + +from substrateinterface import SubstrateInterface +from substrateinterface.exceptions import SubstrateRequestException + +from scripts.utils.chain_model import Chain +from scripts.utils.work_with_data import get_data_from_file, write_data_to_file + +chains_file = get_data_from_file("../../chains/v21/chains_dev.json") + +chains = [Chain(it) for it in chains_file] + +polkadot_id = "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3" + +polkadot = next((chain for chain in chains if chain.chainId == polkadot_id)) +polkadot_parachains = [chain for chain in chains if chain.parentId == polkadot_id] + +polkadot_chains = [polkadot] + polkadot_parachains + +data = {} + + +def get_runtime_prefix(substrate: SubstrateInterface) -> str | None: + registry = substrate.get_type_registry(substrate.block_hash) + + for type_name in registry: + if type_name.endswith("RuntimeEvent"): + return type_name.split("::")[0] + + return None + + +def chain_has_dry_run_api(substrate: SubstrateInterface) -> bool: + try: + substrate.rpc_request(method="state_call", params=["DryRunApi_dry_run_xcm", "0x"]) + except SubstrateRequestException as e: + return "DryRunApi_dry_run_xcm is not found" not in e.args[0]["message"] + + # We don't form a valid dry run params so successfully execution should not be possible but still return True in + # case it somehow happened + return True + + +def process_chain(idx, chain): + print(f"\n{idx + 1}/{len(polkadot_chains)}. Starting fetching data for {chain.name}") + + chain.create_connection() + + if not chain_has_dry_run_api(chain.substrate): + print(f"{chain.name} does not yet have dry run Api, skipping") + + return + + parachainId = None + + if chain.parentId is not None: + try: + parachainId = chain.substrate.query("ParachainInfo", "ParachainId").value + except Exception as e: + print(f"Failed to fetch ParachainId for {chain.name} due to {e}, skipping") + return + + try: + runtime_prefix = get_runtime_prefix(chain.substrate) + if runtime_prefix is None: + print(f"Runtime prefix in {chain.name} was not found, skipping") + except Exception as e: + print(f"Failed to fetch runtime prefix for {chain.name} due to {e}, skipping") + return + + parachain_info = {"parachainId": parachainId, "runtimePrefix": runtime_prefix, "name": chain.name} + data[chain.chainId] = parachain_info + + print(f"Finished fetching data for {chain.name}: {parachain_info}") + write_data_to_file('xcm_registry_additional_data.json', json.dumps(data, indent=4)) + + +for idx, chain in enumerate(polkadot_chains): + try: + process_chain(idx, chain) + except Exception as e: + print(f"Error happened when processing {chain.name}, skipping: {e}") + + continue diff --git a/scripts/xcm_transfers/utils/account_id.py b/scripts/xcm_transfers/utils/account_id.py new file mode 100644 index 000000000..d9ce5ff0e --- /dev/null +++ b/scripts/xcm_transfers/utils/account_id.py @@ -0,0 +1,15 @@ +from scalecodec import ss58_decode + + +def decode_account_id(address: str) -> str: + if address.startswith("0x"): + # Handles both evm addresses and cases when already decoded account id is passed + return address.lower() + else: + return "0x" + ss58_decode(address) + +def multi_address(account: str, evm: bool): + if evm: + return account + else: + return {"Id": account} diff --git a/scripts/xcm_transfers/utils/dry_run_api_types.py b/scripts/xcm_transfers/utils/dry_run_api_types.py new file mode 100644 index 000000000..1e3cd9cea --- /dev/null +++ b/scripts/xcm_transfers/utils/dry_run_api_types.py @@ -0,0 +1,152 @@ +def dry_run_api_types(runtime_types_prefix: str | None) -> dict | None: + if runtime_types_prefix is None: + return None + + return { + "runtime_api": { + "DryRunApi": { + "methods": { + "dry_run_call": { + "description": "Dry run runtime call", + "params": [ + { + "name": "origin_caller", + "type": f"{runtime_types_prefix}::OriginCaller" + }, + { + "name": "call", + "type": "GenericCall" + } + ], + "type": "CallDryRunEffectsResult" + }, + "dry_run_xcm": { + "description": "Dry run xcm program", + "params": [ + { + "name": "origin_location", + "type": "xcm::VersionedLocation" + }, + { + "name": "xcm", + "type": "xcm::VersionedXcm" + } + ], + "type": "XcmDryRunEffectsResult" + }, + }, + "types": { + "CallDryRunEffectsResult": { + "type": "enum", + "type_mapping": [ + [ + "Ok", + "CallDryRunEffects" + ], + [ + "Error", + "DryRunEffectsResultErr" + ] + ] + }, + "DryRunEffectsResultErr": { + "type": "enum", + "value_list": [ + "Unimplemented", + "VersionedConversionFailed" + ] + }, + "CallDryRunEffects": { + "type": "struct", + "type_mapping": [ + [ + "execution_result", + "CallDryRunExecutionResult" + ], + [ + "emitted_events", + f"Vec<{runtime_types_prefix}::RuntimeEvent>" + ], + [ + "local_xcm", + "Option" + ], + [ + "forwarded_xcms", + "Vec<(xcm::VersionedLocation, Vec)>" + ] + ] + }, + "CallDryRunExecutionResult": { + "type": "enum", + "type_mapping": [ + [ + "Ok", + "DispatchPostInfo" + ], + [ + "Error", + "DispatchErrorWithPostInfo" + ] + ] + }, + "XcmDryRunEffects": { + "type": "struct", + "type_mapping": [ + [ + "execution_result", + "staging_xcm::v4::traits::Outcome" + ], + [ + "emitted_events", + f"Vec<{runtime_types_prefix}::RuntimeEvent>" + ], + [ + "forwarded_xcms", + "Vec<(xcm::VersionedLocation, Vec)>" + ] + ] + }, + "XcmDryRunEffectsResult": { + "type": "enum", + "type_mapping": [ + [ + "Ok", + "XcmDryRunEffects" + ], + [ + "Error", + "DryRunEffectsResultErr" + ] + ] + }, + "DispatchErrorWithPostInfo": { + "type": "struct", + "type_mapping": [ + [ + "post_info", + "DispatchPostInfo" + ], + [ + "error", + "sp_runtime::DispatchError" + ], + ] + }, + "DispatchPostInfo": { + "type": "struct", + "type_mapping": [ + [ + "actual_weight", + "Option" + ], + [ + "pays_fee", + "frame_support::dispatch::Pays" + ], + ] + } + } + }, + } + } diff --git a/scripts/xcm_transfers/utils/fix_scale_codec.py b/scripts/xcm_transfers/utils/fix_scale_codec.py new file mode 100644 index 000000000..d83366d5d --- /dev/null +++ b/scripts/xcm_transfers/utils/fix_scale_codec.py @@ -0,0 +1,28 @@ +from scalecodec import ScaleBytes, Tuple as ScaleTuple + + +# This is a modified implementation of Tuple.process_encode that fixes issue https://github.com/polkascan/py-scale-codec/issues/126 +def process_encode(self: ScaleTuple, value): + data = ScaleBytes(bytearray()) + self.value_object = () + + # CHANGED: we additionally check for len(self.type_mapping) == 1 when wrapping the value + if len(self.type_mapping) == 1 or type(value) not in (list, tuple): + value = [value] + + if len(value) != len(self.type_mapping): + raise ValueError('Element count of value ({}) doesn\'t match type_definition ({})'.format( + len(value), len(self.type_mapping)) + ) + + for idx, member_type in enumerate(self.type_mapping): + element_obj = self.runtime_config.create_scale_object( + member_type, metadata=self.metadata + ) + data += element_obj.encode(value[idx]) + self.value_object += (element_obj,) + + return data + +def fix_scale_codec(): + ScaleTuple.process_encode = process_encode diff --git a/scripts/xcm_transfers/utils/log.py b/scripts/xcm_transfers/utils/log.py new file mode 100644 index 000000000..178daf864 --- /dev/null +++ b/scripts/xcm_transfers/utils/log.py @@ -0,0 +1,15 @@ +debug_log_enabled = False + +def debug_log(message: str): + if debug_log_enabled: + print(message) + +def set_debug_log_enabled(enabled: bool): + global debug_log_enabled + debug_log_enabled = enabled + +def enable_debug_log(): + set_debug_log_enabled(True) + +def disable_debug_log(): + set_debug_log_enabled(False) diff --git a/scripts/xcm_transfers/utils/xcm_config_files.py b/scripts/xcm_transfers/utils/xcm_config_files.py new file mode 100644 index 000000000..3e7bf90e3 --- /dev/null +++ b/scripts/xcm_transfers/utils/xcm_config_files.py @@ -0,0 +1,13 @@ +import dataclasses + + +@dataclasses.dataclass +class XCMConfigFiles(object): + + chains: str + + xcm_legacy_config: str + + xcm_dynamic_config: str + + xcm_additional_data: str diff --git a/scripts/xcm_transfers/xcm/__init__.py b/scripts/xcm_transfers/xcm/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/xcm_transfers/xcm/dry_run/__init__.py b/scripts/xcm_transfers/xcm/dry_run/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/xcm_transfers/xcm/dry_run/dispatch_as.py b/scripts/xcm_transfers/xcm/dry_run/dispatch_as.py new file mode 100644 index 000000000..0098032da --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/dispatch_as.py @@ -0,0 +1,17 @@ +from scalecodec import GenericCall +from substrateinterface import SubstrateInterface + + +def compose_dispatch_as( + substrate: SubstrateInterface, + origin: dict, + call: GenericCall +): + return substrate.compose_call( + call_module="Utility", + call_function="dispatch_as", + call_params={ + "as_origin": origin, + "call": call + } + ) diff --git a/scripts/xcm_transfers/xcm/dry_run/dry_run_api.py b/scripts/xcm_transfers/xcm/dry_run/dry_run_api.py new file mode 100644 index 000000000..ec3facb16 --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/dry_run_api.py @@ -0,0 +1,57 @@ +from typing import List + +from scalecodec import GenericCall, GenericEvent + +from scripts.xcm_transfers.xcm.dry_run.errors import is_xcm_run_error, handle_xcm_run_error_execution_result, \ + is_call_run_error, handle_call_run_error_execution_result +from scripts.xcm_transfers.xcm.dry_run.events.xcm import find_sent_xcm +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain +from scripts.xcm_transfers.xcm.versioned_xcm import VerionsedXcm + +# Returns dry run effects if successful. Throws otherwise +def dry_run_xcm(chain: XcmChain, xcm: VerionsedXcm, origin: VerionsedXcm) -> dict: + dry_run_effects = chain.access_substrate( + lambda substrate: substrate.runtime_call(api="DryRunApi", method="dry_run_xcm", + params={"origin_location": origin.versioned, + "xcm": xcm.versioned})).value["Ok"] + execution_result = dry_run_effects["execution_result"] + + if is_xcm_run_error(execution_result): + handle_xcm_run_error_execution_result(execution_result) + else: + return dry_run_effects + +# Returns forwarded xcm if successful. Throws otherwise +def dry_run_intermediate_xcm( + chain: XcmChain, + xcm: VerionsedXcm, + origin: VerionsedXcm, + final_destination_account: str +) -> VerionsedXcm: + dry_run_effects = dry_run_xcm(chain, xcm, origin) + + return find_sent_xcm(chain, dry_run_effects, final_destination_account) + +# Returns emitted events if successful. Throws otherwise +def dry_run_final_xcm(chain: XcmChain, xcm: VerionsedXcm, origin: VerionsedXcm) -> List[dict]: + dry_run_effects = dry_run_xcm(chain, xcm, origin) + + return dry_run_effects["emitted_events"] + +def dry_run_xcm_call( + chain: XcmChain, + call: GenericCall, + origin: dict, + final_destination_account: str +) -> VerionsedXcm: + dry_run_result = chain.access_substrate( + lambda substrate: substrate.runtime_call(api="DryRunApi", method="dry_run_call", + params={"origin_caller": origin, "call": call})).value + + dry_run_effects = dry_run_result["Ok"] + execution_result = dry_run_effects["execution_result"] + + if is_call_run_error(execution_result): + handle_call_run_error_execution_result(chain, execution_result) + else: + return find_sent_xcm(chain, dry_run_effects, final_destination_account) diff --git a/scripts/xcm_transfers/xcm/dry_run/dry_run_sample.py b/scripts/xcm_transfers/xcm/dry_run/dry_run_sample.py new file mode 100644 index 000000000..081dbf50d --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/dry_run_sample.py @@ -0,0 +1,31 @@ +from scripts.xcm_transfers.utils.log import enable_debug_log +from scripts.xcm_transfers.utils.xcm_config_files import XCMConfigFiles +from scripts.xcm_transfers.xcm.dry_run.dry_run_transfer import TransferDryRunner +from scripts.xcm_transfers.xcm.registry.xcm_registry_builder import build_polkadot_xcm_registry +from scripts.xcm_transfers.xcm.xcm_transfer_direction import XcmTransferDirection + +config_files = XCMConfigFiles( + chains="../../../../chains/v21/chains_dev.json", + xcm_legacy_config="../../../../xcm/v6/transfers_dev.json", + xcm_additional_data="../../xcm_registry_additional_data.json", + xcm_dynamic_config="../../../../xcm/v7/transfers_dynamic_dev.json", +) + +registry = build_polkadot_xcm_registry(config_files) + +origin_chain_name = "Polkadot" +destination_chain_name = "Bifrost Polkadot" +origin_token = "DOT" +destination_token = "DOT" + +origin_chain = registry.get_chain_by_name(origin_chain_name) +destination_chain = registry.get_chain_by_name(destination_chain_name) +origin_asset = origin_chain.chain.get_asset_by_symbol(origin_token) +destination_asset = destination_chain.chain.get_asset_by_symbol(destination_token) + +direction = XcmTransferDirection(origin_chain, origin_asset, destination_chain, destination_asset) + +enable_debug_log() + +runner = TransferDryRunner(registry) +runner.dry_run_transfer(direction) diff --git a/scripts/xcm_transfers/xcm/dry_run/dry_run_transfer.py b/scripts/xcm_transfers/xcm/dry_run/dry_run_transfer.py new file mode 100644 index 000000000..daac54f13 --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/dry_run_transfer.py @@ -0,0 +1,129 @@ +from dataclasses import dataclass + +from scalecodec import GenericCall +from substrateinterface import SubstrateInterface + +from scripts.xcm_transfers.utils.fix_scale_codec import fix_scale_codec +from scripts.xcm_transfers.xcm.dry_run.dry_run_api import dry_run_xcm_call, dry_run_final_xcm +from scripts.xcm_transfers.utils.log import debug_log +from scripts.xcm_transfers.xcm.dry_run.dry_run_api import dry_run_intermediate_xcm +from scripts.xcm_transfers.xcm.dry_run.events.deposit import find_deposit_amount +from scripts.xcm_transfers.xcm.dry_run.fund import fund_account_and_then +from scripts.xcm_transfers.xcm.dry_run.origins import root_origin +from scripts.xcm_transfers.xcm.registry.transfer_type import determine_transfer_type +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain +from scripts.xcm_transfers.xcm.registry.xcm_registry import XcmRegistry +from scripts.xcm_transfers.xcm.versioned_xcm import VerionsedXcm +from scripts.xcm_transfers.xcm.versioned_xcm_builder import assets +from scripts.xcm_transfers.xcm.xcm_transfer_direction import XcmTransferDirection + +class TransferDryRunner: + + _registry: XcmRegistry + + def __init__(self, registry: XcmRegistry): + self._registry = registry + + fix_scale_codec() + + def dry_run_transfer(self, transfer_direction: XcmTransferDirection): + origin_chain, chain_asset, destination_chain, destination_asset = transfer_direction.origin_chain, transfer_direction.origin_asset, transfer_direction.destination_chain, transfer_direction.destination_asset + + print( + f"Dry running transfer of {chain_asset.symbol} from {origin_chain.chain.name} to {destination_chain.chain.name}") + + amount = 100 + sender = _dry_run_account_for_chain(origin_chain) + recipient = _dry_run_account_for_chain(destination_chain) + + transfer_type = determine_transfer_type(self._registry, origin_chain, destination_chain, chain_asset) + + token_location_origin = self._registry.reserves.relative_reserve_location(chain_asset, pov_chain=origin_chain) + + dest = origin_chain.sibling_location_of(destination_chain).versioned + assets_param = assets(token_location_origin, amount=chain_asset.planks(amount)).versioned + + remote_reserve_chain = transfer_type.check_remote_reserve() + + beneficiary = destination_chain.account_location(recipient).versioned + + fee_asset_item = 0 + weight_limit = "Unlimited" + + debug_log(f"{transfer_type=}") + debug_log(f"{dest=}") + debug_log(f"{beneficiary=}") + debug_log(f"{assets_param=}") + debug_log(f"{fee_asset_item=}") + debug_log(f"{weight_limit=}") + + debug_log("\n------------------\n") + + def transfer_assets_call(substrate: SubstrateInterface) -> GenericCall: + return substrate.compose_call( + call_module=origin_chain.xcm_pallet_alias(), + call_function="transfer_assets", + call_params={ + "dest": dest, + "assets": assets_param, + "beneficiary": beneficiary, + "fee_asset_item": fee_asset_item, + "weight_limit": weight_limit + } + ) + + call = origin_chain.access_substrate( + lambda s: fund_account_and_then(s, origin_chain, chain_asset, account=sender, amount=amount * 10, + next_call=transfer_assets_call(s)) + ) + + message_to_next_hop = dry_run_xcm_call(origin_chain, call, root_origin(), final_destination_account=recipient) + debug_log(f"Transfer successfully initiated on {origin_chain.chain.name}, message: {message_to_next_hop}") + debug_log("\n------------------\n\n") + + message_to_destination: VerionsedXcm + origin_on_destination: VerionsedXcm + + if remote_reserve_chain is not None: + message_to_reserve = message_to_next_hop + origin_on_reserve = remote_reserve_chain.sibling_location_of(origin_chain) + + debug_log(f"{origin_on_reserve.versioned=}") + + message_to_destination = dry_run_intermediate_xcm(chain=remote_reserve_chain, xcm=message_to_reserve, + origin=origin_on_reserve, + final_destination_account=recipient) + debug_log( + f"Transfer successfully handled by reserve chain {remote_reserve_chain.chain.name}, message: {message_to_reserve.unversioned}\n") + + origin_on_destination = destination_chain.sibling_location_of(remote_reserve_chain) + else: + origin_on_destination = destination_chain.sibling_location_of(origin_chain) + message_to_destination = message_to_next_hop + + debug_log("\n------------------\n") + + destination_events = dry_run_final_xcm(destination_chain, message_to_destination, origin_on_destination) + deposited_amount = find_deposit_amount(destination_events, destination_asset, recipient) + if deposited_amount is None: + raise Exception(f"Deposited amount was not found, final events: {destination_events}") + + result = DryRunTransferResult(execution_fee=amount - deposited_amount) + + debug_log( + f"Transfer successfully finished on {destination_chain.chain.name}, result: {result}") + + return result + +@dataclass +class DryRunTransferResult: + execution_fee: float + +_substrate_account = "13mp1WEs72kbCBF3WKcoK6Hfhu2HHZGpQ4jsKCZbfd6FoRvH" +_evm_account = "0x0c7485f4AA235347BDE0168A59f6c73C7A42ff2C" + +def _dry_run_account_for_chain(chain: XcmChain) -> str: + if chain.chain.has_evm_addresses(): + return _evm_account + else: + return _substrate_account diff --git a/scripts/xcm_transfers/xcm/dry_run/errors.py b/scripts/xcm_transfers/xcm/dry_run/errors.py new file mode 100644 index 000000000..2f74404b8 --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/errors.py @@ -0,0 +1,56 @@ +from substrateinterface import SubstrateInterface + +from scripts.xcm_transfers.utils.log import debug_log +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain + + +def is_call_run_error(execution_result: dict): + return "Error" in execution_result + +def get_module_error(substrate: SubstrateInterface, module_index: int, error_index: int): + debug_log(f"Error index: {module_index}-{error_index}") + + try: + return substrate.metadata.get_module_error(module_index=module_index, error_index=error_index) + except: + # TODO there is some weird behavior that substrate returns out of range (by exactly one) index for a last polkadot xcm error + return substrate.metadata.get_module_error(module_index=module_index, error_index=error_index-1) + + +def extract_dispatch_error_message(chain: XcmChain, dispatch_error) -> str: + error_description: str + + if "Module" in dispatch_error: + module_error = dispatch_error["Module"] + + debug_log(f"Error index raw: {module_error["error"]}") + + error_index = int(module_error["error"][2:4], 16) + + error = chain.access_substrate( + lambda s: get_module_error(s, module_error["index"], error_index)) + error_description = str(error) + else: + error_description = str(dispatch_error) + + return error_description + +def handle_call_run_error_execution_result(chain: XcmChain, execution_result: dict): + error = execution_result["Error"]["error"] + error_description = extract_dispatch_error_message(chain, error) + + raise Exception(error_description) + +def is_xcm_run_error(execution_result: dict): + return "Incomplete" in execution_result or "Error" in execution_result + + +def handle_xcm_run_error_execution_result(execution_result: dict): + if "Incomplete" in execution_result: + error = execution_result["Incomplete"]["error"] + elif "Error" in execution_result: + error = execution_result["Error"]["error"] + else: + error = execution_result + + raise Exception(str(error)) diff --git a/scripts/xcm_transfers/xcm/dry_run/events/__init__.py b/scripts/xcm_transfers/xcm/dry_run/events/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/xcm_transfers/xcm/dry_run/events/base.py b/scripts/xcm_transfers/xcm/dry_run/events/base.py new file mode 100644 index 000000000..b5df8fbad --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/events/base.py @@ -0,0 +1,13 @@ +from typing import List, Callable + + +def find_event(events: List, event_module: str, event_name: str) -> dict | None: + matching_events = find_events(events, event_module, event_name) + return next(iter(matching_events), None) + +def find_events(events: List, event_module: str, event_name: str) -> List[dict]: + return [event for event in events if event["module_id"] == event_module and event["event_id"] == event_name] + +def find_event_with_attributes(events: List, event_module: str, event_name: str, attributes_filter: Callable[[dict], bool]) -> dict | None: + matching_events = find_events(events, event_module, event_name) + return next((e for e in matching_events if attributes_filter(e["attributes"])), None) diff --git a/scripts/xcm_transfers/xcm/dry_run/events/deposit.py b/scripts/xcm_transfers/xcm/dry_run/events/deposit.py new file mode 100644 index 000000000..b764fbdde --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/events/deposit.py @@ -0,0 +1,66 @@ +from typing import List + +from scripts.utils.chain_model import ChainAsset, NativeAssetType, StatemineAssetType, OrmlAssetType, \ + UnsupportedAssetType +from scripts.xcm_transfers.utils.account_id import decode_account_id +from scripts.xcm_transfers.xcm.dry_run.events.base import find_event_with_attributes + + +def find_deposit_amount( + events: List[dict], + deposited_asset: ChainAsset, + deposit_account: str +) -> float | None: + planks: int | None = None + + match deposited_asset.type: + case NativeAssetType(): + planks = _find_native_deposit_amount(events, deposit_account) + case StatemineAssetType(): + planks = _find_statemine_deposit_amount(events, deposit_account) + case OrmlAssetType(): + planks = _find_orml_deposit_amount(events, deposit_account) + case UnsupportedAssetType(): + raise Exception("Unsupported asset type") + + if planks is None: + return None + + return deposited_asset.amount(planks) + +def _find_native_deposit_amount( + events: List[dict], + deposit_account: str, +) -> int | None: + event = find_event_with_attributes(events, "Balances", "Minted", + lambda attrs: decode_account_id(attrs["who"]) == decode_account_id(deposit_account)) + if event is None: + return None + + return event["attributes"]["amount"] + +def _find_statemine_deposit_amount( + events: List[dict], + deposit_account: str, +) -> int | None: + # TODO matching asset id is quite cumbersome here so we dont do it since + # there should only be one "Issued" event to a recipient account, in the receiving token + event = find_event_with_attributes(events, "Assets", "Issued", + lambda attrs: decode_account_id(attrs["owner"]) == decode_account_id(deposit_account)) + if event is None: + return None + + return event["attributes"]["amount"] + +def _find_orml_deposit_amount( + events: List[dict], + deposit_account: str, +) -> int | None: + # TODO matching asset id is quite cumbersome here so we dont do it since + # there should only be one "Issued" event to a recipient account, in the receiving token + event = find_event_with_attributes(events, "Tokens", "Deposited", + lambda attrs: decode_account_id(attrs["who"]) == decode_account_id(deposit_account)) + if event is None: + return None + + return event["attributes"]["amount"] diff --git a/scripts/xcm_transfers/xcm/dry_run/events/xcm.py b/scripts/xcm_transfers/xcm/dry_run/events/xcm.py new file mode 100644 index 000000000..caa534993 --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/events/xcm.py @@ -0,0 +1,134 @@ +from typing import List + +from scripts.xcm_transfers.utils.account_id import decode_account_id +from scripts.xcm_transfers.utils.log import debug_log +from scripts.xcm_transfers.xcm.dry_run.errors import extract_dispatch_error_message +from scripts.xcm_transfers.xcm.dry_run.events.base import find_event, find_events +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain +from scripts.xcm_transfers.xcm.versioned_xcm import VerionsedXcm +from scripts.xcm_transfers.xcm.versioned_xcm_builder import xcm_program + +class XcmSentEvent: + _attributes: dict + sent_message: VerionsedXcm + + def __init__(self, event_data: dict): + self._attributes = event_data["attributes"] + self.sent_message = xcm_program(self._attributes["message"]) + + +def find_sent_xcm( + origin: XcmChain, + success_dry_run_effects: dict, + final_destination_account: str +) -> VerionsedXcm: + emitted_events = success_dry_run_effects["emitted_events"] + xcm_sent_event = _find_xcm_sent_event(origin, emitted_events) + if xcm_sent_event is not None: + debug_log(f"Found sent xcm in XcmSent event") + return xcm_sent_event.sent_message + + forwarded_xcm = _find_forwarded_xcm(success_dry_run_effects, final_destination_account) + if forwarded_xcm is not None: + debug_log(f"Found sent xcm in forwarded xcms") + return forwarded_xcm + + error = _search_for_error_in_events(origin, emitted_events) + if error is not None: + raise Exception(f"Execution failed with {error}") + + raise Exception(f"Sent xcm was not found, got: {success_dry_run_effects}") + + +def _find_xcm_sent_event(chain: XcmChain, events: List) -> XcmSentEvent | None: + event_data = find_event(events, event_module=chain.xcm_pallet_alias(), event_name="Sent") + if event_data is not None: + return XcmSentEvent(event_data) + else: + return None + +def _find_forwarded_xcm( + success_dry_run_effects: dict, + final_destination_account: str, +) -> VerionsedXcm | None: + forwarded_xcms = success_dry_run_effects["forwarded_xcms"] + + final_destination_account_id = decode_account_id(final_destination_account) + + for (destination, messages) in forwarded_xcms: + for message in messages: + message_program = xcm_program(message) + extracted_account = _extract_final_beneficiary_from_program(message_program) + + if extracted_account == final_destination_account_id: + return message_program + + return None + + +def _search_for_error_in_events(chain: XcmChain, events: List) -> str | None: + dispatched_as_events = find_events(events, "Utility", "DispatchedAs") + + for dispatched_as_event in dispatched_as_events: + dispatch_result = dispatched_as_event["attributes"]["result"] + + if "Err" not in dispatch_result: + continue + + error_description = extract_dispatch_error_message(chain, dispatch_result["Err"]) + return error_description + + return None + + +def _extract_final_beneficiary_from_program(program: VerionsedXcm) -> str | None: + for instruction in program.unversioned: + from_instruction = _extract_final_beneficiary_from_instruction(instruction) + if from_instruction is not None: + return from_instruction + + return None + + +def _get_single_key(instruction: dict | str) -> str | None: + if type(instruction) is str: + return None + + if len(instruction) != 1: + raise Exception(f"Expected a single key dict, got: {instruction}") + + return next(iter(instruction)) + + +def _extract_final_beneficiary_from_instruction(instruction: dict) -> str | None: + match _get_single_key(instruction): + case "DepositAsset": + return _extract_beneficiary_from_location(instruction["DepositAsset"]["beneficiary"]) + case "DepositReserveAsset" | "InitiateReserveWithdraw" | "InitiateTeleport" | "TransferReserveAsset" as key: + nested_message = instruction[key]["xcm"] + return _extract_final_beneficiary_from_program(xcm_program(nested_message)) + case _: + return None + + +def _extract_beneficiary_from_location(location: dict) -> str | None: + interior = location["interior"] + x1_junction: dict + + match _get_single_key(interior): + # Accounts are always X1 + case "X1": + x1_junction = interior["X1"] + # pre-v3 x1 interior is just junction itself, otherwise it is a list of single element + if type(x1_junction) is list: + x1_junction = x1_junction[0] + case _: + return None + + match _get_single_key(x1_junction): + case "AccountKey20": + return x1_junction["AccountKey20"]["key"] + case "AccountId32": + return x1_junction["AccountId32"]["id"] + case _: + return None diff --git a/scripts/xcm_transfers/xcm/dry_run/fund.py b/scripts/xcm_transfers/xcm/dry_run/fund.py new file mode 100644 index 000000000..6629cf266 --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/fund.py @@ -0,0 +1,127 @@ +from scalecodec import GenericCall +from substrateinterface import SubstrateInterface + +from scripts.utils.chain_model import StatemineAssetType, OrmlAssetType, ChainAsset, NativeAssetType, \ + UnsupportedAssetType +from scripts.xcm_transfers.utils.account_id import multi_address +from scripts.xcm_transfers.xcm.dry_run.dispatch_as import compose_dispatch_as +from scripts.xcm_transfers.xcm.dry_run.origins import signed_origin +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain + + +def compose_native_fund( + substrate: SubstrateInterface, + chain: XcmChain, + account: str, + amount_planks: int, +) -> GenericCall: + return substrate.compose_call( + call_module="Balances", + call_function="force_set_balance", + call_params={ + "who": multi_address(account, chain.chain.has_evm_addresses()), + "new_free": amount_planks + } + ) + + +def compose_assets_fund( + substrate: SubstrateInterface, + chain: XcmChain, + statemine_type: StatemineAssetType, + account: str, + amount_planks: int, +) -> GenericCall: + asset_info = substrate.query(module=statemine_type.pallet_name(), storage_function="Asset", + params=[statemine_type.encodable_asset_id()]).value + issuer = asset_info["issuer"] + + mint_call = substrate.compose_call( + call_module=statemine_type.pallet_name(), + call_function="mint", + call_params={ + "id": statemine_type.encodable_asset_id(), + "beneficiary": multi_address(account, chain.chain.has_evm_addresses()), + "amount": amount_planks + } + ) + + return compose_dispatch_as( + substrate=substrate, + origin=signed_origin(issuer), + call=mint_call + ) + + +def compose_orml_fund( + substrate: SubstrateInterface, + chain: XcmChain, + orml_type: OrmlAssetType, + account: str, + amount_planks: int, +) -> GenericCall: + return substrate.compose_call( + call_module=orml_type.pallet_name(), + call_function="set_balance", + call_params={ + "who": multi_address(account, chain.chain.has_evm_addresses()), + "currency_id": orml_type.encodable_asset_id(), + "new_free": amount_planks, + "new_reserved": 0, + } + ) + + +def compose_fund_call( + substrate: SubstrateInterface, + chain: XcmChain, + chain_asset: ChainAsset, + account: str, + amount_planks: int, +) -> GenericCall: + match chain_asset.type: + case NativeAssetType(): + return compose_native_fund(substrate, chain, account, amount_planks) + case StatemineAssetType() as statemineType: + return compose_assets_fund(substrate, chain, statemineType, account, amount_planks) + case OrmlAssetType() as ormlType: + return compose_orml_fund(substrate, chain, ormlType, account, amount_planks) + case UnsupportedAssetType(): + raise Exception("Unsupported asset type") + + +def fund_account_and_then( + substrate: SubstrateInterface, + chain: XcmChain, + chain_asset: ChainAsset, + account: str, + amount: int, + next_call: GenericCall +) -> GenericCall: + planks_in_sending_asset = chain_asset.planks(amount) + + calls = [] + + fund_sending_asset_call = compose_fund_call(substrate, chain, chain_asset, account, planks_in_sending_asset) + calls.append(fund_sending_asset_call) + + utility_asset = chain.chain.get_utility_asset() + if utility_asset.id != chain_asset.id: + planks_in_utility_asset = utility_asset.planks(amount) + fund_utility_asset_call = compose_fund_call(substrate, chain, utility_asset, account, planks_in_utility_asset) + calls.append(fund_utility_asset_call) + + wrapped_next_call = compose_dispatch_as( + substrate=substrate, + origin=signed_origin(account), + call=next_call + ) + calls.append(wrapped_next_call) + + return substrate.compose_call( + call_module="Utility", + call_function="batch_all", + call_params={ + "calls": calls + } + ) diff --git a/scripts/xcm_transfers/xcm/dry_run/origins.py b/scripts/xcm_transfers/xcm/dry_run/origins.py new file mode 100644 index 000000000..2ba31d946 --- /dev/null +++ b/scripts/xcm_transfers/xcm/dry_run/origins.py @@ -0,0 +1,6 @@ +def signed_origin(account: str) -> dict: + return {"system": {"Signed": account}} + + +def root_origin() -> dict: + return {"system": "Root"} diff --git a/scripts/xcm_transfers/xcm/graph/__init__.py b/scripts/xcm_transfers/xcm/graph/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/xcm_transfers/xcm/graph/config_traversal.py b/scripts/xcm_transfers/xcm/graph/config_traversal.py new file mode 100644 index 000000000..e8a9303c4 --- /dev/null +++ b/scripts/xcm_transfers/xcm/graph/config_traversal.py @@ -0,0 +1,49 @@ +from typing import List, Iterator + +from scripts.xcm_transfers.xcm.registry.xcm_registry import XcmRegistry +from scripts.xcm_transfers.xcm.xcm_transfer_direction import XcmTransferDirection + + +class XcmConfigTraversal: + xcm_config: dict + registry: XcmRegistry + + def __init__(self, xcm_config: dict, xcm_registry: XcmRegistry): + self.xcm_config = xcm_config + self.registry = xcm_registry + + def collect_config_directions(self) -> List[XcmTransferDirection]: + return [it for it in self.traverse_known_directions()] + + def traverse_known_directions(self) -> Iterator[XcmTransferDirection]: + for xcm_chain_config in self.xcm_config["chains"]: + origin_chain_id = xcm_chain_config["chainId"] + origin_chain = self.registry.get_chain_or_none(origin_chain_id) + if origin_chain is None: + continue + + for origin_asset_config in xcm_chain_config["assets"]: + origin_asset_id = origin_asset_config["assetId"] + origin_chain_asset = origin_chain.chain.get_asset_by_id(origin_asset_id) + + reserves = self.registry.reserves.get_reserve_or_none(origin_chain_asset) + if reserves is None: + continue + reserve_chain = reserves.reserve_chain_or_none() + if reserve_chain is None: + continue + + for transfer_config in origin_asset_config["xcmTransfers"]: + destination_config = transfer_config["destination"] + destination_chain_id = destination_config["chainId"] + destination_asset_id = destination_config["assetId"] + + destination_chain = self.registry.get_chain_or_none(destination_chain_id) + if destination_chain is None: + continue + + destination_asset = destination_chain.chain.get_asset_by_id(destination_asset_id) + + direction = XcmTransferDirection(origin_chain, origin_chain_asset, destination_chain, destination_asset) + + yield direction diff --git a/scripts/xcm_transfers/xcm/graph/xcm_connectivity_graph.py b/scripts/xcm_transfers/xcm/graph/xcm_connectivity_graph.py new file mode 100644 index 000000000..b69c3eaad --- /dev/null +++ b/scripts/xcm_transfers/xcm/graph/xcm_connectivity_graph.py @@ -0,0 +1,119 @@ +from __future__ import annotations + +from typing import List, Dict, Tuple + +from scripts.utils.chain_model import ChainAsset +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain +from scripts.xcm_transfers.xcm.registry.xcm_registry import XcmRegistry +from scripts.xcm_transfers.xcm.xcm_transfer_direction import XcmTransferDirection + + +class XcmChainConnectivityGraph: + _graph: Dict[str, List[str]] + _registry: XcmRegistry + + def __init__(self, registry: XcmRegistry, hrmp_channels: List[Tuple[int, int]]) -> None: + self._graph = _construct_chain_graph(registry, hrmp_channels) + self._registry = registry + + def has_connection(self, origin_chain_id: str, destination_chain_id: str) -> bool: + origin_directions = self._graph.get(origin_chain_id, []) + return destination_chain_id in origin_directions + + def _has_transfer_path(self, potential_destination: XcmTransferDirection) -> bool: + reserve = self._registry.reserves.get_reserve_or_none(potential_destination.origin_asset) + if reserve is None: + return False + + reserve_chain_id = reserve.reserve_chain_id() + + origin_chain_id = potential_destination.origin_chain.chain.chainId + destination_chain_id = potential_destination.destination_chain.chain.chainId + + if origin_chain_id != reserve_chain_id and destination_chain_id != reserve_chain_id: + has_path_to_reserve = self.has_connection(origin_chain_id, reserve_chain_id) + has_path_from_reserve = self.has_connection(reserve_chain_id, destination_chain_id) + + return has_path_to_reserve and has_path_from_reserve + else: + return self.has_connection(origin_chain_id, destination_chain_id) + + def _get_matched_origin_and_destination_asset_pairs( + self, + origin_chain: XcmChain, + destination_chain: XcmChain, + ) -> List[Tuple[ChainAsset, ChainAsset]]: + unified_destination_ids = {asset.unified_symbol():asset for asset in destination_chain.chain.assets} + + result = [] + + for asset in origin_chain.chain.assets: + unified_symbol = asset.unified_symbol() + destination_asset = unified_destination_ids.get(unified_symbol, None) + + if destination_asset is not None: + result.append((asset, destination_asset)) + + return result + + def construct_potential_directions(self) -> List[XcmTransferDirection]: + result = [] + + for origin in self._registry.all_chains(): + for destination in self._registry.all_chains(): + if origin.chain.chainId == destination.chain.chainId: + continue + + matched_asset_pairs = self._get_matched_origin_and_destination_asset_pairs(origin, destination) + + for (origin_asset, destination_asset) in matched_asset_pairs: + potential_destination = XcmTransferDirection(origin, origin_asset, destination, destination_asset) + + if self._has_transfer_path(potential_destination): + result.append(potential_destination) + + return result + + @staticmethod + def construct_default(xcm_registry: XcmRegistry) -> XcmChainConnectivityGraph: + hrmp_channels = _fetch_hrmp_channels(xcm_registry.relay) + return XcmChainConnectivityGraph(xcm_registry, hrmp_channels) + + +def _fetch_hrmp_channels(relay: XcmChain) -> List[Tuple[int, int]]: + hrmp_channels_map = relay.access_substrate(lambda s: s.query_map(module="Hrmp", storage_function="HrmpChannels")) + return [result[0].value for result in hrmp_channels_map] + +def _construct_chain_graph( + registry: XcmRegistry, + hrmp_channels: List[Tuple[int, int]], +) -> Dict[str, List[str]]: + relay = registry.relay + result: Dict[str, List[str]] = {} + + def add_edge_by_id(origin: str, destination: str): + edges = result.get(origin) + if edges is None: + result[origin] = [destination] + else: + edges.append(destination) + + def add_edge_by_chain(origin: XcmChain, destination: XcmChain): + add_edge_by_id(origin.chain.chainId, destination.chain.chainId) + + # relay is accessible from each parachain + for parachain in registry.parachains: + add_edge_by_chain(relay, parachain) + add_edge_by_chain(parachain, relay) + + # add all supported channels + for channel in hrmp_channels: + origin = registry.get_parachain_or_none(channel["recipient"]) + destination = registry.get_parachain_or_none(channel["sender"]) + + if origin is None or destination is None: + continue + + add_edge_by_chain(origin, destination) + + return result diff --git a/scripts/xcm_transfers/xcm/multi_location.py b/scripts/xcm_transfers/xcm/multi_location.py new file mode 100644 index 000000000..579285b81 --- /dev/null +++ b/scripts/xcm_transfers/xcm/multi_location.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from dataclasses import dataclass +from typing import List + +# A class representing GlobalMultiLocations - a location that is represented from the root ancestry point of view +# Thus, it cannot have any parents, and we separate it on type level from RelativeMultiLocation for better code safety +@dataclass +class GlobalMultiLocation: + junctions: List[dict] + + def as_relative(self) -> RelativeMultiLocation: + return RelativeMultiLocation(parents=0, junctions=self.junctions) + + # Reanchor given location to a point of view of given `target` location + # Basic algorithm idea: + # We find the last common ancestor and consider the target location to be "up to ancestor and down to self": + # 1. Find last common ancestor between `self` and `target` + # 2. Use all junctions after common ancestor as result junctions + # 3. Use difference between len(target.junctions) and common_ancestor_idx + # to termine how many "up" hops are needed to reach common ancestor + def reanchor(self, target: GlobalMultiLocation) -> RelativeMultiLocation: + common_ancestor_idx = self.find_last_common_junction_idx(target) + if common_ancestor_idx is None: + return RelativeMultiLocation(parents=len(target.junctions), junctions=self.junctions) + + parents = len(target.junctions) - (common_ancestor_idx+1) + junctions = self.junctions[(common_ancestor_idx+1):] + + return RelativeMultiLocation(parents=parents, junctions=junctions) + + + def find_last_common_junction_idx(self, other: GlobalMultiLocation) -> int | None: + result = None + + for index in range(min(len(self.junctions), len(other.junctions))): + self_junction = self.junctions[index] + other_junction = other.junctions[index] + + if self_junction == other_junction: + result = index + else: + break + + return result + +@dataclass +class RelativeMultiLocation: + parents: int + junctions: List[dict] + + def __init__(self, parents: int, junctions: List[dict]): + self.parents = parents + self.junctions = junctions diff --git a/scripts/xcm_transfers/xcm/registry/__init__.py b/scripts/xcm_transfers/xcm/registry/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/xcm_transfers/xcm/registry/parachain.py b/scripts/xcm_transfers/xcm/registry/parachain.py new file mode 100644 index 000000000..9983525c5 --- /dev/null +++ b/scripts/xcm_transfers/xcm/registry/parachain.py @@ -0,0 +1,9 @@ +from dataclasses import dataclass + +from scripts.utils.chain_model import Chain + + +@dataclass +class Parachain: + parachain_id: int + chain: Chain diff --git a/scripts/xcm_transfers/xcm/registry/reserve_location.py b/scripts/xcm_transfers/xcm/registry/reserve_location.py new file mode 100644 index 000000000..fee96a10f --- /dev/null +++ b/scripts/xcm_transfers/xcm/registry/reserve_location.py @@ -0,0 +1,88 @@ +from collections import defaultdict +from typing import Tuple, Callable + +from scripts.utils.chain_model import ChainAsset +from scripts.xcm_transfers.xcm.multi_location import GlobalMultiLocation +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain +from scripts.xcm_transfers.xcm.versioned_xcm import VerionsedXcm +from scripts.xcm_transfers.xcm.versioned_xcm_builder import multi_location_from + + +class ReserveLocation: + _reserve_chain: str + _asset_location: GlobalMultiLocation + + def __init__( + self, + reserve_chain_id: str, + asset_location: GlobalMultiLocation, + get_chain: Callable[[str], XcmChain | None], + ): + self._reserve_chain_id = reserve_chain_id + self._asset_location = asset_location + self.get_chain_or_none = get_chain + + def parachain_id(self) -> int | None: + return self.reserve_chain().parachain_id + + def reanchor(self, pov_chain: XcmChain) -> VerionsedXcm: + reanchored_location = self._asset_location.reanchor(pov_chain.global_location()) + return multi_location_from(reanchored_location) + + def reserve_chain(self) -> XcmChain: + chain = self.get_chain_or_none(self._reserve_chain_id) + if chain is None: + raise Exception(f"Reserve chain {self._reserve_chain_id} not found") + + return chain + + def reserve_chain_or_none(self) -> XcmChain: + return self.get_chain_or_none(self._reserve_chain_id) + + def reserve_chain_id(self) -> str: + return self._reserve_chain_id + + +class ReserveLocations: + _locations_by_reserve_id: dict[str, ReserveLocation] + + # By default, asset reserve id is equal to its symbol + # This mapping allows to override that for cases like multiple reserves (Statemine & Polkadot for DOT) + _asset_reserve_override: dict[Tuple[str, int], str] + + def __init__( + self, + locations_by_reserve_id: dict[str, ReserveLocation], + asset_reserve_override: dict[Tuple[str, int], str], + ): + self._locations_by_reserve_id = locations_by_reserve_id + self._asset_reserve_override = asset_reserve_override + + + def get_reserve(self, chain_asset: ChainAsset) -> ReserveLocation: + reserve_id = self._get_reserve_id(chain_asset) + return self._locations_by_reserve_id[reserve_id] + + def get_reserve_or_none(self, chain_asset: ChainAsset) -> ReserveLocation | None: + reserve_id = self._get_reserve_id(chain_asset) + return self._locations_by_reserve_id.get(reserve_id, None) + + def _get_reserve_id(self, chain_asset: ChainAsset) -> str | None: + symbol = chain_asset.unified_symbol() + + override = self._asset_reserve_override.get(chain_asset.full_chain_asset_id(), None) + return override if override is not None else symbol + + def relative_reserve_location(self, chain_asset: ChainAsset, pov_chain: XcmChain) -> VerionsedXcm: + reserve = self.get_reserve(chain_asset) + return reserve.reanchor(pov_chain) + + def dump_overrides(self) -> dict[str, dict[str]]: + overrides_as_dict = defaultdict(dict) + + for (chain_id, asset_id), reserve_location in self._asset_reserve_override.items(): + chain_overrides = overrides_as_dict[chain_id] + chain_overrides[asset_id] = reserve_location + overrides_as_dict[chain_id] = chain_overrides + + return overrides_as_dict diff --git a/scripts/xcm_transfers/xcm/registry/transfer_type.py b/scripts/xcm_transfers/xcm/registry/transfer_type.py new file mode 100644 index 000000000..d50d0ca81 --- /dev/null +++ b/scripts/xcm_transfers/xcm/registry/transfer_type.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from typing import Union + +from scripts.utils.chain_model import ChainAsset +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain +from scripts.xcm_transfers.xcm.registry.xcm_registry import XcmRegistry + + +def determine_transfer_type( + registry: XcmRegistry, + origin_chain: XcmChain, + destination_chain: XcmChain, + chain_asset: ChainAsset +) -> TransferType: + reserve = registry.reserves.get_reserve(chain_asset) + reserve_parachain_id = reserve.parachain_id() + origin_parachain_id = origin_chain.parachain_id + + if _should_use_teleport(origin_chain, destination_chain): + return Teleport() + elif origin_parachain_id == reserve_parachain_id: + return LocalReserve() + elif destination_chain.parachain_id == reserve_parachain_id: + return DestinationReserve() + else: + reserve_chain = reserve.reserve_chain() + return RemoteReserve(origin_chain=origin_chain, reserve_chain=reserve_chain, registry=registry) + +def _should_use_teleport(origin_chain: XcmChain, destination_chain: XcmChain) -> bool: + to_relay_teleport = origin_chain.is_system_parachain() and destination_chain.is_relay() + from_relay_teleport = origin_chain.is_relay() and destination_chain.is_system_parachain() + system_chains_teleport = origin_chain.is_system_parachain() and destination_chain.is_system_parachain() + + return to_relay_teleport or from_relay_teleport or system_chains_teleport + +class TransferType(ABC): + + @abstractmethod + def check_remote_reserve(self) -> Union[XcmChain, None]: + pass + + @abstractmethod + def transfer_type_call_param(self) -> dict | str: + pass + + def __str__(self): + return self.transfer_type_call_param() + + +class Teleport(TransferType): + + def check_remote_reserve(self) -> Union[XcmChain, None]: + return None + + def transfer_type_call_param(self) -> dict | str: + return "Teleport" + + +class LocalReserve(TransferType): + + def check_remote_reserve(self) -> Union[XcmChain, None]: + return None + + def transfer_type_call_param(self) -> dict | str: + return "LocalReserve" + + +class DestinationReserve(TransferType): + + def check_remote_reserve(self) -> Union[XcmChain, None]: + return None + + def transfer_type_call_param(self) -> dict | str: + return "DestinationReserve" + + +class RemoteReserve(TransferType): + _origin_chain: XcmChain + _reserve_chain: XcmChain + _registry: XcmRegistry + + def __init__(self, origin_chain: XcmChain, reserve_chain: XcmChain, registry: XcmRegistry): + self._reserve_chain = reserve_chain + self._registry = registry + self._origin_chain = origin_chain + + def check_remote_reserve(self) -> Union[XcmChain, None]: + return self._reserve_chain + + def transfer_type_call_param(self) -> dict | str: + return {"RemoteReserve": self._origin_chain.sibling_location_of(self._reserve_chain).versioned} diff --git a/scripts/xcm_transfers/xcm/registry/xcm_chain.py b/scripts/xcm_transfers/xcm/registry/xcm_chain.py new file mode 100644 index 000000000..ca45ebd37 --- /dev/null +++ b/scripts/xcm_transfers/xcm/registry/xcm_chain.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from typing import Callable, TypeVar + +from substrateinterface import SubstrateInterface + +from scripts.utils.chain_model import Chain +from scripts.xcm_transfers.xcm.multi_location import GlobalMultiLocation +from scripts.xcm_transfers.xcm.versioned_xcm import VerionsedXcm +from scripts.xcm_transfers.xcm.versioned_xcm_builder import parachain_junction, multi_location, account_junction, \ + multi_location_from + +T = TypeVar('T') + +xcm_pallet_aliases = ["PolkadotXcm", "XcmPallet"] + +class XcmChain: + chain: Chain + parachain_id: int | None + + def __init__( + self, + chain: Chain, + parachain_id: int | None, + ): + self.chain = chain + self.parachain_id = parachain_id + + def access_substrate(self, action: Callable[[SubstrateInterface], T]) -> T: + return self.chain.access_substrate(action) + + def sibling_location_of(self, destination_chain: XcmChain) -> VerionsedXcm: + relative_location = destination_chain.global_location().reanchor(self.global_location()) + + return multi_location_from(relative_location) + + def global_location(self, ) -> GlobalMultiLocation: + if self.parachain_id is not None: + return GlobalMultiLocation([parachain_junction(self.parachain_id)]) + else: + return GlobalMultiLocation([]) + + def account_location(self, account: str): + return multi_location(parents=0, junctions=[account_junction(account, evm=self.chain.has_evm_addresses())]) + + def xcm_pallet_alias(self) -> str: + result = next((candidate for candidate in xcm_pallet_aliases if + self.access_substrate(lambda s: s.get_metadata_module(candidate)) is not None), None) + + if result is None: + raise Exception(f"No XcmPallet or its aliases has been found. Searched aliases: {xcm_pallet_aliases}") + + return result + + def is_system_parachain(self) -> bool: + return self.parachain_id is not None and 1000 <= self.parachain_id < 2000 + + def is_relay(self) -> bool: + return self.parachain_id is None diff --git a/scripts/xcm_transfers/xcm/registry/xcm_registry.py b/scripts/xcm_transfers/xcm/registry/xcm_registry.py new file mode 100644 index 000000000..08cbdd4fa --- /dev/null +++ b/scripts/xcm_transfers/xcm/registry/xcm_registry.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from typing import List, Callable + +from scripts.utils.chain_model import Chain +from scripts.xcm_transfers.xcm.registry.parachain import Parachain +from scripts.xcm_transfers.xcm.registry.reserve_location import ReserveLocations +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain + + +class XcmRegistry: + reserves: ReserveLocations + relay: XcmChain + parachains: List[XcmChain] + + _chains_by_id: dict[str, XcmChain] + _chains: List[XcmChain] + _parachains_by_para_id: dict[int, XcmChain] + + def __init__( + self, + relay: Chain, + parachains: List[Parachain], + reserves_constructor: Callable[[XcmRegistry], ReserveLocations], + ): + self.reserves = reserves_constructor(self) + self.relay = XcmChain(relay, parachain_id=None) + self.parachains = [XcmChain(parachain.chain, parachain_id=parachain.parachain_id) for parachain + in parachains] + + self._chains = [self.relay] + self.parachains + self._chains_by_id = self._associate_chains_by_id(self._chains) + self._parachains_by_para_id = self._associate_parachains_by_id(self.parachains) + + def get_parachain(self, parachain_id: int | None) -> XcmChain: + if parachain_id is None: + return self.relay + + return self._parachains_by_para_id[parachain_id] + + def get_parachain_or_none(self, parachain_id: int | None) -> XcmChain | None: + if parachain_id is None: + return self.relay + + return self._parachains_by_para_id.get(parachain_id, None) + + def all_chains(self) -> List[XcmChain]: + return self._chains + + def get_chain(self, chain_id: str) -> XcmChain: + return self._chains_by_id[chain_id] + + def get_chain_by_name(self, name: str) -> XcmChain: + return next((chain for chain in self._chains if chain.chain.name == name)) + + def get_chain_or_none(self, chain_id: str) -> XcmChain | None: + return self._chains_by_id.get(chain_id, None) + + def has_chain(self, chain_id: str) -> bool: + return chain_id in self._chains_by_id + + @staticmethod + def _associate_chains_by_id(all_chains: List[XcmChain]) -> dict[str, XcmChain]: + return {xcm_chain.chain.chainId: xcm_chain for xcm_chain in all_chains} + + @staticmethod + def _associate_parachains_by_id(all_parachains: List[XcmChain]) -> dict[int, XcmChain]: + return {xcm_chain.parachain_id: xcm_chain for xcm_chain in all_parachains} diff --git a/scripts/xcm_transfers/xcm/registry/xcm_registry_builder.py b/scripts/xcm_transfers/xcm/registry/xcm_registry_builder.py new file mode 100644 index 000000000..9b8d5d137 --- /dev/null +++ b/scripts/xcm_transfers/xcm/registry/xcm_registry_builder.py @@ -0,0 +1,113 @@ +import functools +from typing import Tuple + +from scalecodec import ScaleBytes + +from scripts.utils.chain_model import Chain +from scripts.utils.work_with_data import get_data_from_file +from scripts.xcm_transfers.utils.dry_run_api_types import dry_run_api_types +from scripts.xcm_transfers.utils.log import debug_log +from scripts.xcm_transfers.utils.xcm_config_files import XCMConfigFiles +from scripts.xcm_transfers.xcm.multi_location import GlobalMultiLocation +from scripts.xcm_transfers.xcm.registry.parachain import Parachain +from scripts.xcm_transfers.xcm.registry.reserve_location import ReserveLocation, ReserveLocations +from scripts.xcm_transfers.xcm.registry.xcm_registry import XcmRegistry + + +def _map_junction_from_config(config_key: str, config_value) -> dict: + match config_key: + case "parachainId": + return {"Parachain": config_value} + case "generalKey": + return {"GeneralKey": _general_key_junction(config_value)} + case "generalIndex": + return {"GeneralIndex": int(config_value)} + case "palletInstance": + return {"PalletInstance": config_value} + + +def _truncate_or_pad(data: bytes, required_size: int) -> bytes: + truncated = data[0::required_size] + padded = truncated.rjust(required_size, b'\0') + return bytes(padded) + + +def _general_key_junction(key) -> dict: + scale_bytes = ScaleBytes(key) + + fixed_size_bytes = _truncate_or_pad(scale_bytes.data, required_size=32) + + return {"length": scale_bytes.length, "data": fixed_size_bytes} + + +def _build_reserve_locations_map( + asset_locations_config: dict, + xcm_registry: XcmRegistry +) -> dict[str, ReserveLocation]: + result = {} + + for reserve_id, reserve_config in asset_locations_config.items(): + junctions = [_map_junction_from_config(config_key, config_value) for config_key, config_value in + reserve_config["multiLocation"].items()] + + chain_id = reserve_config["chainId"] + + global_location = GlobalMultiLocation(junctions) + + result[reserve_id] = ReserveLocation(chain_id, global_location, xcm_registry.get_chain) + + return result + + +def _build_reserve_overrides(reserve_id_overrides: dict) -> dict[Tuple[str, int], str]: + result = {} + + for chain_id, chain_reserve_overrides in reserve_id_overrides.items(): + for asset_id, reserve_id in chain_reserve_overrides.items(): + result[(chain_id, int(asset_id))] = reserve_id + + return result + + +def _build_reserves(xcm_config: dict, xcm_registry: XcmRegistry) -> ReserveLocations: + reserve_locations = _build_reserve_locations_map(xcm_config["assetsLocation"], xcm_registry) + asset_reserve_overrides = _build_reserve_overrides(xcm_config["reserveIdOverrides"]) + + return ReserveLocations(reserve_locations, asset_reserve_overrides) + +def build_polkadot_xcm_registry(config_files: XCMConfigFiles) -> XcmRegistry: + return build_xcm_registry(relay_id="91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", files=config_files) + +def build_xcm_registry( + relay_id: str, + files: XCMConfigFiles +) -> XcmRegistry: + additional_xcm_data = get_data_from_file(files.xcm_additional_data) + chains_file = get_data_from_file(files.chains) + + relay: Chain | None = None + parachains = [] + + for chain_config in chains_file: + additional_xcm_chain_data = additional_xcm_data.get(chain_config["chainId"], None) + + if additional_xcm_chain_data is None: + debug_log(f"No additional xcm data found for {chain_config["name"]}, skipping") + continue + + runtime_prefix = additional_xcm_chain_data["runtimePrefix"] + type_registry = dry_run_api_types(runtime_prefix) + chain = Chain(chain_config, type_registry) + + if chain.chainId == relay_id: + relay = chain + else: + parachain = Parachain(additional_xcm_chain_data["parachainId"], chain) + parachains.append(parachain) + + if relay is None: + raise Exception("Relay was not found in configuration") + + xcm_config = get_data_from_file(files.xcm_dynamic_config) + + return XcmRegistry(relay, parachains, functools.partial(_build_reserves, xcm_config)) diff --git a/scripts/xcm_transfers/xcm/test_multi_location.py b/scripts/xcm_transfers/xcm/test_multi_location.py new file mode 100644 index 000000000..dfd6fbac7 --- /dev/null +++ b/scripts/xcm_transfers/xcm/test_multi_location.py @@ -0,0 +1,60 @@ +from scripts.xcm_transfers.xcm.multi_location import GlobalMultiLocation, RelativeMultiLocation +from scripts.xcm_transfers.xcm.versioned_xcm_builder import parachain_junction + + +def test_reanchor_global_pov_should_remain_unchanged(): + + initial = GlobalMultiLocation(junctions=[parachain_junction(1000)]) + pov = GlobalMultiLocation(junctions=[]) + expected = initial.as_relative() + + result = initial.reanchor(pov) + + assert result == expected + + +def test_no_common_junctions(): + initial = GlobalMultiLocation(junctions=[parachain_junction(1000)]) + pov = GlobalMultiLocation(junctions=[parachain_junction(2000)]) + expected = RelativeMultiLocation(parents=1, junctions=[parachain_junction(1000)]) + + result = initial.reanchor(pov) + + assert result == expected + +def test_one_common_junctions(): + initial = GlobalMultiLocation(junctions=[parachain_junction(1000), parachain_junction(2000)]) + pov = GlobalMultiLocation(junctions=[parachain_junction(1000), parachain_junction(3000)]) + expected = RelativeMultiLocation(parents=1, junctions=[parachain_junction(2000)]) + + result = initial.reanchor(pov) + + assert result == expected + +def test_all_common_junctions(): + initial = GlobalMultiLocation(junctions=[parachain_junction(1000), parachain_junction(2000)]) + pov = GlobalMultiLocation(junctions=[parachain_junction(1000), parachain_junction(2000)]) + expected = RelativeMultiLocation(parents=0, junctions=[]) + + result = initial.reanchor(pov) + + assert result == expected + +def test_global_to_global(): + initial = GlobalMultiLocation(junctions=[]) + pov = GlobalMultiLocation(junctions=[]) + expected = RelativeMultiLocation(parents=0, junctions=[]) + + result = initial.reanchor(pov) + + assert result == expected + +# This is "DOT on Relay from PAH pov" test +def test_pov_is_successor(): + initial = GlobalMultiLocation(junctions=[]) + pov = GlobalMultiLocation(junctions=[parachain_junction(1000)]) + expected = RelativeMultiLocation(parents=1, junctions=[]) + + result = initial.reanchor(pov) + + assert result == expected diff --git a/scripts/xcm_transfers/xcm/versioned_xcm.py b/scripts/xcm_transfers/xcm/versioned_xcm.py new file mode 100644 index 000000000..75d2ea72b --- /dev/null +++ b/scripts/xcm_transfers/xcm/versioned_xcm.py @@ -0,0 +1,59 @@ +import types +from typing import List + +xcm_version_mode_consts = types.SimpleNamespace() +xcm_version_mode_consts.AlreadyVersioned = "AlreadyVersioned" +xcm_version_mode_consts.DefaultVersion = "DefaultVersion" + + +class VerionsedXcm: + unversioned: dict + versioned: dict | List + version: int + + @staticmethod + def default_xcm_version() -> int: + return 4 + + def __init__(self, + message: dict | List, + message_version: str | int = xcm_version_mode_consts.DefaultVersion, + ): + match message_version: + case int(): + self._init_from_unversioned(message, version=message_version) + case xcm_version_mode_consts.AlreadyVersioned: + self._init_from_versioned(message) + case xcm_version_mode_consts.DefaultVersion: + self._init_from_unversioned(message, version=None) + case _: + raise Exception(f"Unknown message version mode: {message_version}") + + def _init_from_versioned(self, message: dict): + if type(message) is not dict: + raise Exception(f"Already versioned xcm must be a dict with a single version key, got: {message}") + + version_key = next(iter(message)) + + self.version = self._parse_version(version_key) + self.versioned = message + self.unversioned = message[version_key] + + def _init_from_unversioned(self, message: dict | List, version: int | None): + if version is None: + self.version = VerionsedXcm.default_xcm_version() + else: + self.version = version + + self.unversioned = message + self.versioned = {f"V{self.version}": message} + + @staticmethod + def _parse_version(version_key: str): + return int(version_key.removeprefix("V")) + + def __str__(self): + return str(self.versioned) + + def is_v4(self) -> bool: + return self.version == 4 diff --git a/scripts/xcm_transfers/xcm/versioned_xcm_builder.py b/scripts/xcm_transfers/xcm/versioned_xcm_builder.py new file mode 100644 index 000000000..afd73ee0f --- /dev/null +++ b/scripts/xcm_transfers/xcm/versioned_xcm_builder.py @@ -0,0 +1,77 @@ +from typing import List + +from scripts.xcm_transfers.utils.account_id import decode_account_id +from scripts.xcm_transfers.xcm.multi_location import RelativeMultiLocation +from scripts.xcm_transfers.xcm.versioned_xcm import VerionsedXcm, xcm_version_mode_consts + + +def multi_location(parents: int, junctions: List[dict]) -> VerionsedXcm: + interior = "Here" + + if len(junctions) > 0: + interior_variant = f"X{len(junctions)}" + + if VerionsedXcm.default_xcm_version() <= 3 and len(junctions) == 1: + interior = {interior_variant: junctions[0]} + else: + interior = {interior_variant: junctions} + + return VerionsedXcm({"parents": parents, "interior": interior}) + +def multi_location_from(relative_location: RelativeMultiLocation) -> VerionsedXcm: + return multi_location(relative_location.parents, relative_location.junctions) + +def asset_id(location: VerionsedXcm) -> VerionsedXcm: + if location.is_v4(): + return location + else: + return VerionsedXcm({"Concrete": location.unversioned}) + + +def asset(location: VerionsedXcm, amount: int) -> VerionsedXcm: + return VerionsedXcm({"id": asset_id(location).unversioned, "fun": {"Fungible": amount}}) + + +def assets(location: VerionsedXcm, amount: int) -> VerionsedXcm: + return VerionsedXcm([asset(location, amount).unversioned]) + + +def absolute_location(junctions: List[dict]) -> VerionsedXcm: + return multi_location(parents=0, junctions=junctions) + + +def xcm_program(message: List[dict] | dict[str, List]) -> VerionsedXcm: + # List of instructions + if type(message) is list: + return VerionsedXcm(message) + # Versioned program + else: + return VerionsedXcm(message, message_version=xcm_version_mode_consts.AlreadyVersioned) + + +def buy_execution(fees_asset: VerionsedXcm, weight_limit: str | dict = "Unlimited"): + return {'BuyExecution': {'fees': fees_asset.unversioned, 'weight_limit': weight_limit}} + + +def deposit_asset( + beneficiary: str, + evm: bool +): + return {"DepositAsset": {"assets": {'Wild': {'AllCounted': 1}}, + "beneficiary": absolute_location( + junctions=[account_junction(beneficiary, evm)]).unversioned}} + + +def account_junction( + account: str, + evm: bool, +) -> dict: + account_id = decode_account_id(account) + + if evm: + return {"AccountKey20": {"network": None, "key": account_id}} + else: + return {"AccountId32": {"network": None, "id": account_id}} + +def parachain_junction(parachain_id: int) -> dict: + return {"Parachain": parachain_id} diff --git a/scripts/xcm_transfers/xcm/xcm_transfer_direction.py b/scripts/xcm_transfers/xcm/xcm_transfer_direction.py new file mode 100644 index 000000000..6d907225d --- /dev/null +++ b/scripts/xcm_transfers/xcm/xcm_transfer_direction.py @@ -0,0 +1,16 @@ +from dataclasses import dataclass + +from scripts.utils.chain_model import ChainAsset +from scripts.xcm_transfers.xcm.registry.xcm_chain import XcmChain + + +@dataclass +class XcmTransferDirection: + origin_chain: XcmChain + origin_asset: ChainAsset + + destination_chain: XcmChain + destination_asset: ChainAsset + + def __repr__(self): + return f"{self.origin_asset.symbol} {self.origin_chain.chain.name} -> {self.destination_chain.chain.name}" diff --git a/scripts/xcm_transfers/xcm_registry_additional_data.json b/scripts/xcm_transfers/xcm_registry_additional_data.json new file mode 100644 index 000000000..d6a76cb81 --- /dev/null +++ b/scripts/xcm_transfers/xcm_registry_additional_data.json @@ -0,0 +1,47 @@ +{ + "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3": { + "parachainId": null, + "runtimePrefix": "polkadot_runtime", + "name": "Polkadot" + }, + "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21": { + "parachainId": 2086, + "runtimePrefix": "spiritnet_runtime", + "name": "KILT" + }, + "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d": { + "parachainId": 2004, + "runtimePrefix": "moonbeam_runtime", + "name": "Moonbeam" + }, + "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6": { + "parachainId": 2006, + "runtimePrefix": "astar_runtime", + "name": "Astar" + }, + "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f": { + "parachainId": 1000, + "runtimePrefix": "asset_hub_polkadot_runtime", + "name": "Polkadot Asset Hub" + }, + "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b": { + "parachainId": 2030, + "runtimePrefix": "bifrost_polkadot_runtime", + "name": "Bifrost Polkadot" + }, + "dcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464": { + "parachainId": 1002, + "runtimePrefix": "bridge_hub_polkadot_runtime", + "name": "Polkadot Bridge Hub" + }, + "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2": { + "parachainId": 1001, + "runtimePrefix": "collectives_polkadot_runtime", + "name": "Polkadot Collectives" + }, + "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008": { + "parachainId": 1004, + "runtimePrefix": "people_polkadot_runtime", + "name": "Polkadot People" + } +} diff --git a/xcm/v7/transfers_dev.json b/xcm/v7/transfers_dev.json new file mode 100644 index 000000000..375e1be4f --- /dev/null +++ b/xcm/v7/transfers_dev.json @@ -0,0 +1,8810 @@ +{ + "assetsLocation": { + "KAR": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "multiLocation": { + "parachainId": 2000, + "generalKey": "0x0080" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensReserve" + } + }, + "KSM": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "multiLocation": {}, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensReserve" + } + }, + "KSM-Statemine": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "multiLocation": {} + }, + "DOT-Statemint": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "multiLocation": {} + }, + "MOVR": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "multiLocation": { + "parachainId": 2023, + "palletInstance": 10 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "43218062500000000" + }, + "instructions": "xtokensReserve" + } + }, + "BNC": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "multiLocation": { + "parachainId": 2001, + "generalKey": "0x0001" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "7471468330240" + }, + "instructions": "xtokensReserve" + } + }, + "UNIT": { + "chainId": "e1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", + "multiLocation": {}, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "35047875048" + }, + "instructions": "xtokensReserve" + } + }, + "ACA": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "multiLocation": { + "parachainId": 2000, + "generalKey": "0x0000" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "8037000000000" + }, + "instructions": "xtokensReserve" + } + }, + "DOT": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "multiLocation": {}, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xtokensReserve" + } + }, + "GLMR": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "multiLocation": { + "parachainId": 2004, + "palletInstance": 10 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "4321806250000000000" + }, + "instructions": "xtokensReserve" + } + }, + "RMRK": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "8" + } + }, + "KINT": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "multiLocation": { + "parachainId": 2092, + "generalKey": "0x000c" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "270826666660" + }, + "instructions": "xtokensReserve" + } + }, + "HKO": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "multiLocation": { + "parachainId": 2085, + "generalKey": "0x484b4f" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "607385811467444" + }, + "instructions": "xtokensReserve" + } + }, + "PARA": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "multiLocation": { + "parachainId": 2012, + "generalKey": "0x50415241" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "1883239171374764" + }, + "instructions": "xtokensReserve" + } + }, + "INTR": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "multiLocation": { + "parachainId": 2032, + "generalKey": "0x0002" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "24016821864" + }, + "instructions": "xtokensReserve" + } + }, + "iBTC": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "multiLocation": { + "parachainId": 2032, + "generalKey": "0x0001" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "79491" + }, + "instructions": "xtokensReserve" + } + }, + "kBTC": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "multiLocation": { + "parachainId": 2092, + "generalKey": "0x000b" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "896382" + }, + "instructions": "xtokensReserve" + } + }, + "BSX": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "multiLocation": { + "parachainId": 2090, + "generalIndex": "0" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "55000000000000000" + }, + "instructions": "xtokensReserve" + } + }, + "WND": { + "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "multiLocation": {}, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "8800337932977" + }, + "instructions": "xtokensReserve" + } + }, + "WND-Westmint": { + "chainId": "67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9", + "multiLocation": {} + }, + "TNKR": { + "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", + "multiLocation": { + "parachainId": 2125, + "generalIndex": "0" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "803768064687254" + }, + "instructions": "xtokensReserve" + } + }, + "USDT-Statemine": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "1984" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "902213" + }, + "instructions": "xtokensReserve" + } + }, + "USDT-Statemint": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "1984" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensReserve" + } + }, + "XRT": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "multiLocation": { + "parachainId": 2048 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xtokensReserve" + } + }, + "ASTR": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "multiLocation": { + "parachainId": 2006 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "933933541289201792" + }, + "instructions": "xtokensReserve" + } + }, + "SDN": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "multiLocation": { + "parachainId": 2007 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "1167416926611502336" + }, + "instructions": "xtokensReserve" + } + }, + "CFG": { + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "multiLocation": { + "parachainId": 2031, + "generalKey": "0x0001" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "8037680646872538112" + }, + "instructions": "xtokensReserve" + } + }, + "KMA": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "multiLocation": { + "parachainId": 2084 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "3082280000" + }, + "instructions": "xtokensReserve" + } + }, + "USDC-Statemint": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "1337" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensReserve" + } + }, + "BNC-Polkadot": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "multiLocation": { + "parachainId": 2030, + "generalKey": "0x0001" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "9339000000" + }, + "instructions": "xtokensReserve" + } + }, + "vDOT": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "multiLocation": { + "parachainId": 2030, + "generalKey": "0x0900" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "932506" + }, + "instructions": "xtokensReserve" + } + }, + "SUB": { + "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", + "multiLocation": { + "parachainId": 2101 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "8000000000000" + }, + "instructions": "xtokensReserve" + } + }, + "MANTA": { + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "multiLocation": { + "parachainId": 2104 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "98974000" + }, + "instructions": "xtokensReserve" + } + }, + "DED-Statemint": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "30" + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "0" + }, + "instructions": "xtokensReserve" + } + }, + "KILT": { + "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", + "multiLocation": { + "parachainId": 2086 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "47535131" + }, + "instructions": "xtokensReserve" + } + }, + "MYTH": { + "chainId": "f6ee56e9c5277df5b4ce6ae9983ee88f3cbed27d31beeb98f9f84f997a1ab0b9", + "multiLocation": { + "parachainId": 3369 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "65536000000000000000" + }, + "instructions": "xtokensReserve" + } + }, + "NODL": { + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "multiLocation": { + "parachainId": 2026, + "palletInstance": 2 + }, + "reserveFee": { + "mode": { + "type": "proportional", + "value": "84817500000" + }, + "instructions": "xtokensReserve" + } + } + }, + "instructions": { + "xtokensDest": [ + "ReserveAssetDeposited", + "ClearOrigin", + "BuyExecution", + "DepositAsset" + ], + "xtokensReserve": [ + "WithdrawAsset", + "ClearOrigin", + "BuyExecution", + "DepositReserveAsset" + ], + "xcmPalletDest": [ + "ReserveAssetDeposited", + "ClearOrigin", + "BuyExecution", + "DepositAsset" + ], + "xcmPalletTeleportDest": [ + "ReceiveTeleportedAsset", + "ClearOrigin", + "BuyExecution", + "DepositAsset" + ] + }, + "networkDeliveryFee": { + "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a": { + "toParent": { + "type": "exponential", + "factorPallet": "ParachainSystem", + "sizeBase": "1000000000", + "sizeFactor": "333333", + "alwaysHoldingPays": false + }, + "toParachain": { + "type": "exponential", + "factorPallet": "XcmpQueue", + "sizeBase": "1000000000", + "sizeFactor": "333333", + "alwaysHoldingPays": false + } + }, + "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e": { + "toParachain": { + "type": "exponential", + "factorPallet": "Dmp", + "sizeBase": "30000000000", + "sizeFactor": "100000000", + "alwaysHoldingPays": false + } + }, + "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe": { + "toParachain": { + "type": "exponential", + "factorPallet": "Dmp", + "sizeBase": "1000000000", + "sizeFactor": "3333333", + "alwaysHoldingPays": false + } + }, + "67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9": { + "toParachain": { + "type": "exponential", + "factorPallet": "XcmpQueue", + "sizeBase": "30000000000", + "sizeFactor": "10000000" + } + }, + "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3": { + "toParachain": { + "type": "exponential", + "factorPallet": "Dmp", + "sizeBase": "300000000", + "sizeFactor": "1000000" + } + }, + "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f": { + "toParent": { + "type": "exponential", + "factorPallet": "ParachainSystem", + "sizeBase": "300000000", + "sizeFactor": "100000", + "alwaysHoldingPays": false + }, + "toParachain": { + "type": "exponential", + "factorPallet": "XcmpQueue", + "sizeBase": "300000000", + "sizeFactor": "100000", + "alwaysHoldingPays": false + } + }, + "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5": { + "toParent": { + "type": "exponential", + "factorPallet": "ParachainSystem", + "sizeBase": "1000000000", + "sizeFactor": "333333", + "alwaysHoldingPays": false + }, + "toParachain": { + "type": "exponential", + "factorPallet": "XcmpQueue", + "sizeBase": "1000000000", + "sizeFactor": "333333", + "alwaysHoldingPays": false + } + }, + "dcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464": { + "toParent": { + "type": "exponential", + "factorPallet": "ParachainSystem", + "sizeBase": "300000000", + "sizeFactor": "100000", + "alwaysHoldingPays": false + }, + "toParachain": { + "type": "exponential", + "factorPallet": "XcmpQueue", + "sizeBase": "16912512364", + "sizeFactor": "100000", + "alwaysHoldingPays": false + } + }, + "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2": { + "toParent": { + "type": "exponential", + "factorPallet": "ParachainSystem", + "sizeBase": "300000000", + "sizeFactor": "100000", + "alwaysHoldingPays": false + }, + "toParachain": { + "type": "exponential", + "factorPallet": "XcmpQueue", + "sizeBase": "300000000", + "sizeFactor": "100000", + "alwaysHoldingPays": false + } + }, + "f6ee56e9c5277df5b4ce6ae9983ee88f3cbed27d31beeb98f9f84f997a1ab0b9": { + "toParent": { + "type": "exponential", + "factorPallet": "ParachainSystem", + "sizeBase": "300000000", + "sizeFactor": "100000", + "alwaysHoldingPays": false + }, + "toParachain": { + "type": "exponential", + "factorPallet": "XcmpQueue", + "sizeBase": "300000000", + "sizeFactor": "100000", + "alwaysHoldingPays": false + } + } + }, + "networkBaseWeight": { + "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe": "1000000000", + "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b": "200000000", + "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b": "200000000", + "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed": "200000000", + "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527": "200000000", + "e1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443": "1000000000", + "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3": "1000000000", + "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c": "200000000", + "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d": "200000000", + "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a": "1000000000", + "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b": "200000000", + "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f": "1000000000", + "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b": "150000000", + "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d": "1000000000", + "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d": "200000000", + "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97": "150000000", + "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72": "200000000", + "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6": "1000000000", + "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa": "150000000", + "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755": "100000000", + "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e": "1000000000", + "67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9": "1000000000", + "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2": "100000000", + "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b": "200000000", + "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d": "100000000", + "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc": "1000000000", + "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86": "1000000000", + "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5": "1000000000", + "dcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464": "1000000000", + "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2": "1000000000", + "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82": "200000000", + "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1": "100000000", + "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108": "1000000000", + "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf": "150000000", + "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f": "200000000", + "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb": "1000000000", + "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21": "124414000", + "f6ee56e9c5277df5b4ce6ae9983ee88f3cbed27d31beeb98f9f84f997a1ab0b9": "1000000000", + "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f": "1000000000", + "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008": "1000000000", + "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21": "1000000000" + }, + "chains": [ + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "assetId": 4, + "assetLocation": "KAR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339335412800" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "154320987654320" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "8000000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "63129375000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "1212500000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 2, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "355657856051" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "66666666667" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 0, + "assetLocation": "MOVR", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "249360255521760000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "3949447077409162752" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "333333333333000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 14, + "fee": { + "mode": { + "type": "proportional", + "value": "80376806468720000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1262587500000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "43875000000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 5, + "assetLocation": "BNC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "20748158586573" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "7471468330240" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 1, + "assetLocation": "RMRK", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "179650006" + }, + "instructions": "xcmPalletDest", + "asset": { + "originAssetId": 2, + "destAssetId": 0, + "location": "KSM-Statemine", + "locationPath": { + "type": "absolute" + } + } + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 11, + "assetLocation": "HKO", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "607385811467444" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 15, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "80000000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "4800000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 3, + "assetLocation": "KINT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "270826666660" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "214338150611" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "431250000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 7, + "assetLocation": "USDT-Statemine", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "902213" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 17, + "assetLocation": "XRT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "941571977" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 12, + "assetLocation": "KMA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "3082280000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 16, + "assetLocation": "SDN", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "1167416926611502336" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + } + ] + }, + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "assetId": 0, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "29941666751" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + }, + { + "destination": { + "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "1200618133" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "355657856051" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "66666666667" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "1544517624" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + } + ] + }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "assetId": 4, + "assetLocation": "BNC", + "assetLocationPath": { + "type": "concrete", + "path": { + "parents": 1, + "parachainId": 2001, + "generalKey": "0x0001" + } + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "30460406568099" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "7471468330240" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 0, + "assetLocation": "KAR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "107162405931142" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "154320987654320" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339335412800" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "8000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "63129375000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "1212500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 7, + "assetLocation": "KINT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "270826666660" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "24692790376122" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "431250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 15, + "assetLocation": "HKO", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "607385811467444" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 11, + "fee": { + "mode": { + "type": "proportional", + "value": "1658565192363043" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "80000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "4800000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 2, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "355657856051" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "66666666667" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 14, + "assetLocation": "MOVR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "249360255521760000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "333333333333000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "43218062500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "3949447077409162752" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1262587500000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "43875000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 22, + "assetLocation": "BSX", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "55000000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 17, + "assetLocation": "USDT-Statemine", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "902213" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 18, + "assetLocation": "KMA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "3082280000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", + "assets": [ + { + "assetId": 1, + "assetLocation": "UNIT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "e1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "35047875048" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "e1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", + "assets": [ + { + "assetId": 0, + "assetLocation": "UNIT", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "523779593547" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + } + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "assetId": 3, + "assetLocation": "ACA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "196078431372549" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "277000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 1, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "53711462025" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "18012616398" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1376030024" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "11673750000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "42682928123" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "26399155184" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 0, + "assetLocation": "GLMR", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "73389109056216060000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "93390000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "79550000000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 16, + "fee": { + "mode": { + "type": "proportional", + "value": "62141510437275262976" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 4, + "assetLocation": "PARA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "1883239171374764" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "8457550059064" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 5, + "assetLocation": "INTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "24016821864" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "80370000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 12, + "fee": { + "mode": { + "type": "proportional", + "value": "10893246187363" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9590000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 6, + "assetLocation": "iBTC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "79491" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 12, + "fee": { + "mode": { + "type": "proportional", + "value": "8038" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 13, + "fee": { + "mode": { + "type": "proportional", + "value": "172577" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "22000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 10, + "assetLocation": "USDT-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 8, + "assetLocation": "ASTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "933933541289201792" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 11, + "assetLocation": "CFG", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872538112" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 22, + "assetLocation": "MANTA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "98974000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 23, + "assetLocation": "USDC-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + }, + { + "assetId": 16, + "assetLocation": "NODL", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "84817500000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet-transferAssets" + } + ] + } + ] + }, + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "assetId": 0, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17356651607" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8982500000" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + }, + { + "destination": { + "chainId": "dcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "394791750" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + }, + { + "destination": { + "chainId": "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8799873000" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "53711462025" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1376030024" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "18012616398" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "11673750000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "42682928123" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "26399155184" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "45871559633" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "321808729" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "assetId": 0, + "assetLocation": "ACA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "138917929637904" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "196078431372549" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "277000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 9, + "assetLocation": "INTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "24016821864" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "2447575392893" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 12, + "fee": { + "mode": { + "type": "proportional", + "value": "10893246187363" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9590000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 12, + "assetLocation": "iBTC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "79491" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "26453" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 13, + "fee": { + "mode": { + "type": "proportional", + "value": "172577" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "22000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "18012616398" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "53711462025" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17356651607" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "11673750000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "42682928123" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "26399155184" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 5, + "assetLocation": "GLMR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "93390000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "4321806250000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "73389109056216060000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "79550000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 16, + "fee": { + "mode": { + "type": "proportional", + "value": "62141510437275262976" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 14, + "assetLocation": "USDT-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 10, + "assetLocation": "ASTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "933933541289201792" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "132260688624999923712" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 6, + "assetLocation": "PARA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "1883239171374764" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "2089595672670131" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ + { + "assetId": 0, + "assetLocation": "KSM-Statemine", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + }, + { + "assetId": 1, + "assetLocation": "RMRK", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "82320119048" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + }, + { + "assetId": 7, + "assetLocation": "USDT-Statemine", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "17287225" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "9061" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 17, + "fee": { + "mode": { + "type": "proportional", + "value": "100473" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "46875000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "2870850" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 10, + "fee": { + "mode": { + "type": "proportional", + "value": "262500" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + } + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "assetId": 8, + "assetLocation": "MOVR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "43218062500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "333333333333000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "3949447077409162752" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 14, + "fee": { + "mode": { + "type": "proportional", + "value": "80376806468720000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1262587500000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "43875000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 0, + "assetLocation": "BNC", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "30460406568099" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "20748158586573" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "20000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 1, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "133333333333" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "355657856051" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "66666666667" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 4, + "assetLocation": "KAR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "107162405931142" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "154320987654320" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "8000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "63129375000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "1212500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 7, + "assetLocation": "USDT-Statemine", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "902213" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assets": [ + { + "assetId": 0, + "assetLocation": "KINT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "214338150611" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "24692790376122" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "431250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 2, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "355657856051" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "66666666667" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 1, + "assetLocation": "kBTC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "297" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ + { + "assetId": 0, + "assetLocation": "DOT-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "79336744814" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + }, + { + "assetId": 1, + "assetLocation": "USDT-Statemint", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "25000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 14, + "fee": { + "mode": { + "type": "proportional", + "value": "30000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 10, + "fee": { + "mode": { + "type": "proportional", + "value": "17269955" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 14, + "fee": { + "mode": { + "type": "proportional", + "value": "1005251" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "0" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "32810000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "11888560" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "262500" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + }, + { + "assetId": 2, + "assetLocation": "USDC-Statemint", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 15, + "fee": { + "mode": { + "type": "proportional", + "value": "47469788" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 23, + "fee": { + "mode": { + "type": "proportional", + "value": "17252719" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "25000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + }, + { + "assetId": 15, + "assetLocation": "MYTH", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "f6ee56e9c5277df5b4ce6ae9983ee88f3cbed27d31beeb98f9f84f997a1ab0b9", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "81920000000000016384" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 36, + "fee": { + "mode": { + "type": "proportional", + "value": "7822222222222225408" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + } + ] + }, + { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assets": [ + { + "assetId": 0, + "assetLocation": "HKO", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "4800000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 11, + "fee": { + "mode": { + "type": "proportional", + "value": "1658565192363043" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "80000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 15, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 5, + "assetLocation": "KAR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339335412800" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "107162405931142" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "8000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "63129375000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "1212500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 1, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "66666666667" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 6, + "assetLocation": "MOVR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "43218062500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "249360255521760000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 14, + "fee": { + "mode": { + "type": "proportional", + "value": "80376806468720000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "333333333333000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1262587500000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "43875000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 9, + "assetLocation": "USDT-Statemine", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "902213" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "assets": [ + { + "assetId": 5, + "assetLocation": "HKO", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "607385811467444" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "80000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 11, + "fee": { + "mode": { + "type": "proportional", + "value": "1658565192363043" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 15, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "KAR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339335412800" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "107162405931142" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "154320987654320" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "assets": [ + { + "assetId": 7, + "assetLocation": "MOVR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "43218062500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "249360255521760000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "BNC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "7471468330240" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 1, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 2, + "assetLocation": "KAR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339335412800" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assets": [ + { + "assetId": 0, + "assetLocation": "INTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "2447575392893" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "80370000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9590000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 17, + "fee": { + "mode": { + "type": "proportional", + "value": "2343508113982" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 1, + "assetLocation": "iBTC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "26453" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 12, + "fee": { + "mode": { + "type": "proportional", + "value": "8038" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "22000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 2, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1376030024" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17356651607" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "11673750000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "42682928123" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "26399155184" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 7, + "assetLocation": "USDT-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assets": [ + { + "assetId": 1, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "355657856051" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assets": [ + { + "assetId": 0, + "assetLocation": "BSX", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 22, + "fee": { + "mode": { + "type": "proportional", + "value": "80376806468720" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 1, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "355657856051" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "66666666667" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "TNKR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "803768064687254" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 4, + "assetLocation": "USDT-Statemine", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "902213" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 5, + "assetLocation": "XRT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "1158776" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 17, + "fee": { + "mode": { + "type": "proportional", + "value": "4883396893" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "assets": [ + { + "assetId": 0, + "assetLocation": "WND", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "800000000000" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + } + ] + }, + { + "chainId": "67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9", + "assets": [ + { + "assetId": 0, + "assetLocation": "WND-Westmint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8800337932977" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + } + ] + }, + { + "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", + "assets": [ + { + "assetId": 0, + "assetLocation": "TNKR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "128546741605299" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assets": [ + { + "assetId": 1, + "assetLocation": "GLMR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "4321806250000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "73389109056216060000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "79550000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 16, + "fee": { + "mode": { + "type": "proportional", + "value": "62141510437275262976" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 2, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1376030024" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "18012616398" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "53711462025" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17356651607" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "42682928123" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "26399155184" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "USDT-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 4, + "assetLocation": "ASTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "933933541289201792" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 10, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "132260688624999923712" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 0, + "assetLocation": "BNC-Polkadot", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 11, + "fee": { + "mode": { + "type": "proportional", + "value": "21264531249466" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 5, + "assetLocation": "vDOT", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 19, + "fee": { + "mode": { + "type": "proportional", + "value": "27911692308" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assets": [ + { + "assetId": 1, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1376030024" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "11673750000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "18012616398" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17356651607" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "53711462025" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "26399155184" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 6, + "assetLocation": "iBTC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "79491" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "26453" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 12, + "fee": { + "mode": { + "type": "proportional", + "value": "8038" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 13, + "fee": { + "mode": { + "type": "proportional", + "value": "172577" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 9, + "assetLocation": "USDT-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 8, + "assetLocation": "ASTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "933933541289201792" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 10, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 10, + "assetLocation": "CFG", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872538112" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 15, + "assetLocation": "USDC-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 16, + "assetLocation": "GLMR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "79550000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "93390000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "73389109056216060000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "4321806250000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 17, + "assetLocation": "INTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "24016821864" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 11, + "assetLocation": "BNC-Polkadot", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "9339000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 19, + "assetLocation": "vDOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "932506" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 18, + "assetLocation": "SUB", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 34, + "assetLocation": "KILT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "47535131" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 36, + "assetLocation": "MYTH", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "f6ee56e9c5277df5b4ce6ae9983ee88f3cbed27d31beeb98f9f84f997a1ab0b9", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "65536000000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 15, + "fee": { + "mode": { + "type": "proportional", + "value": "19052138160000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 26, + "assetLocation": "NODL", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "84817500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "assets": [ + { + "assetId": 0, + "assetLocation": "XRT", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 17, + "fee": { + "mode": { + "type": "proportional", + "value": "4883396893" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "941571977" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + }, + { + "assetId": 1, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + } + ] + }, + { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assets": [ + { + "assetId": 1, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1376030024" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "11673750000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "42682928123" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "18012616398" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17356651607" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "53711462025" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 2, + "assetLocation": "USDT-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "USDC-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", + "assets": [ + { + "assetId": 0, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + } + ] + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assets": [ + { + "assetId": 0, + "assetLocation": "ASTR", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 10, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339000000000000" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "132260688624999923712" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "112563722370570600448" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + }, + { + "assetId": 1, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "1376030024" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "11673750000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "42682928123" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "18012616398" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17356651607" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "53711462025" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "26399155184" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 9, + "assetLocation": "USDT-Statemint", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "17500000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 6, + "assetLocation": "ACA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "138917929637904" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "196078431372549" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 2, + "assetLocation": "GLMR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "4321806250000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "8037000000000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "93390000000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "73389109056216060000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 16, + "fee": { + "mode": { + "type": "proportional", + "value": "62141510437275262976" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 4, + "assetLocation": "INTR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "24016821864" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 9, + "fee": { + "mode": { + "type": "proportional", + "value": "80370000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "2447575392893" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 12, + "fee": { + "mode": { + "type": "proportional", + "value": "10893246187363" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "iBTC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "79491" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assetId": 12, + "fee": { + "mode": { + "type": "proportional", + "value": "8038" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "22000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "26453" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assetId": 13, + "fee": { + "mode": { + "type": "proportional", + "value": "172577" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "assets": [ + { + "assetId": 0, + "assetLocation": "CFG", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 11, + "fee": { + "mode": { + "type": "proportional", + "value": "23888832078357995520" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 10, + "fee": { + "mode": { + "type": "proportional", + "value": "24087860729545437184" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "assets": [ + { + "assetId": 2, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "MOVR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "43218062500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "249360255521760000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 14, + "fee": { + "mode": { + "type": "proportional", + "value": "80376806468720000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "3949447077409162752" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 0, + "assetLocation": "KMA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 12, + "fee": { + "mode": { + "type": "proportional", + "value": "5953003667418515" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 18, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 1, + "assetLocation": "KAR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "107162405931142" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "154320987654320" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339335412800" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assets": [ + { + "assetId": 6, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1089250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "66666666667" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 9, + "assetLocation": "KAR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "8037680646872" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "9339335412800" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 5, + "fee": { + "mode": { + "type": "proportional", + "value": "154320987654320" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 4, + "fee": { + "mode": { + "type": "proportional", + "value": "107162405931142" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 10, + "assetLocation": "USDT-Statemine", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "902213" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 5, + "assetLocation": "KINT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "270826666660" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 3, + "fee": { + "mode": { + "type": "proportional", + "value": "24692790376122" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "214338150611" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 0, + "assetLocation": "SDN", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 16, + "fee": { + "mode": { + "type": "proportional", + "value": "41310942824506654720" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 3, + "assetLocation": "MOVR", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 8, + "fee": { + "mode": { + "type": "proportional", + "value": "249360255521760000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "43218062500000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 14, + "fee": { + "mode": { + "type": "proportional", + "value": "80376806468720000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "3949447077409162752" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 4, + "assetLocation": "kBTC", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "896382" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "assets": [ + { + "assetId": 1, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "116731806804" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "150596331765" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "46064814619" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "253900000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assetId": 2, + "fee": { + "mode": { + "type": "proportional", + "value": "449135489738" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "assetId": 1, + "fee": { + "mode": { + "type": "proportional", + "value": "1014528041555" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + }, + { + "destination": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "assetId": 6, + "fee": { + "mode": { + "type": "proportional", + "value": "1250000000" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 2, + "assetLocation": "USDT-Statemine", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assetId": 7, + "fee": { + "mode": { + "type": "proportional", + "value": "902213" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", + "assets": [ + { + "assetId": 0, + "assetLocation": "SUB", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 18, + "fee": { + "mode": { + "type": "proportional", + "value": "9000000003" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + } + ] + }, + { + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "assets": [ + { + "assetId": 1, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + }, + { + "assetId": 0, + "assetLocation": "MANTA", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 22, + "fee": { + "mode": { + "type": "proportional", + "value": "5880008503401360384" + }, + "instructions": "xtokensDest" + } + }, + "type": "xtokens" + } + ] + } + ] + }, + { + "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", + "assets": [ + { + "assetId": 0, + "assetLocation": "KILT", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 34, + "fee": { + "mode": { + "type": "proportional", + "value": "92928220845792352" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + } + ] + }, + { + "chainId": "f6ee56e9c5277df5b4ce6ae9983ee88f3cbed27d31beeb98f9f84f997a1ab0b9", + "assets": [ + { + "assetId": 0, + "assetLocation": "MYTH", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 36, + "fee": { + "mode": { + "type": "proportional", + "value": "7822222222222225408" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 15, + "fee": { + "mode": { + "type": "proportional", + "value": "19052138160000000000" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + } + ] + }, + { + "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "assets": [ + { + "assetId": 0, + "assetLocation": "KSM", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "26729534265" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + } + ] + }, + { + "chainId": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", + "assets": [ + { + "assetId": 0, + "assetLocation": "DOT", + "assetLocationPath": { + "type": "absolute" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "fee": { + "mode": { + "type": "proportional", + "value": "5175135755" + }, + "instructions": "xcmPalletTeleportDest" + } + }, + "type": "xcmpallet-teleport" + } + ] + } + ] + }, + { + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "assets": [ + { + "assetId": 0, + "assetLocation": "NODL", + "assetLocationPath": { + "type": "relative" + }, + "xcmTransfers": [ + { + "destination": { + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "assetId": 26, + "fee": { + "mode": { + "type": "proportional", + "value": "57243054451952" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + }, + { + "destination": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 16, + "fee": { + "mode": { + "type": "proportional", + "value": "216679148637925" + }, + "instructions": "xcmPalletDest" + } + }, + "type": "xcmpallet" + } + ] + } + ] + } + ] +} diff --git a/xcm/v7/transfers_dynamic_dev.json b/xcm/v7/transfers_dynamic_dev.json new file mode 100644 index 000000000..433bc8883 --- /dev/null +++ b/xcm/v7/transfers_dynamic_dev.json @@ -0,0 +1,648 @@ +{ + "assetsLocation": { + "KAR": { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "multiLocation": { + "parachainId": 2000, + "generalKey": "0x0080" + } + }, + "KSM": { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "multiLocation": {} + }, + "KSM-Statemine": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "multiLocation": {} + }, + "DOT-Statemint": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "multiLocation": {} + }, + "MOVR": { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "multiLocation": { + "parachainId": 2023, + "palletInstance": 10 + } + }, + "BNC": { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "multiLocation": { + "parachainId": 2001, + "generalKey": "0x0001" + } + }, + "UNIT": { + "chainId": "e1ea3ab1d46ba8f4898b6b4b9c54ffc05282d299f89e84bd0fd08067758c9443", + "multiLocation": {} + }, + "ACA": { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "multiLocation": { + "parachainId": 2000, + "generalKey": "0x0000" + } + }, + "DOT": { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "multiLocation": {} + }, + "GLMR": { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "multiLocation": { + "parachainId": 2004, + "palletInstance": 10 + } + }, + "RMRK": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "8" + } + }, + "KINT": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "multiLocation": { + "parachainId": 2092, + "generalKey": "0x000c" + } + }, + "HKO": { + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "multiLocation": { + "parachainId": 2085, + "generalKey": "0x484b4f" + } + }, + "PARA": { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "multiLocation": { + "parachainId": 2012, + "generalKey": "0x50415241" + } + }, + "INTR": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "multiLocation": { + "parachainId": 2032, + "generalKey": "0x0002" + } + }, + "iBTC": { + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "multiLocation": { + "parachainId": 2032, + "generalKey": "0x0001" + } + }, + "kBTC": { + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "multiLocation": { + "parachainId": 2092, + "generalKey": "0x000b" + } + }, + "BSX": { + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "multiLocation": { + "parachainId": 2090, + "generalIndex": "0" + } + }, + "WND": { + "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "multiLocation": {} + }, + "WND-Westmint": { + "chainId": "67f9723393ef76214df0118c34bbbd3dbebc8ed46a10973a8c969d48fe7598c9", + "multiLocation": {} + }, + "TNKR": { + "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", + "multiLocation": { + "parachainId": 2125, + "generalIndex": "0" + } + }, + "USDT-Statemine": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "1984" + } + }, + "USDT-Statemint": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "1984" + } + }, + "XRT": { + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "multiLocation": { + "parachainId": 2048 + } + }, + "ASTR": { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "multiLocation": { + "parachainId": 2006 + } + }, + "SDN": { + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "multiLocation": { + "parachainId": 2007 + } + }, + "CFG": { + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "multiLocation": { + "parachainId": 2031, + "generalKey": "0x0001" + } + }, + "KMA": { + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "multiLocation": { + "parachainId": 2084 + } + }, + "USDC-Statemint": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "1337" + } + }, + "BNC-Polkadot": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "multiLocation": { + "parachainId": 2030, + "generalKey": "0x0001" + } + }, + "vDOT": { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "multiLocation": { + "parachainId": 2030, + "generalKey": "0x0900" + } + }, + "SUB": { + "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", + "multiLocation": { + "parachainId": 2101 + } + }, + "MANTA": { + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "multiLocation": { + "parachainId": 2104 + } + }, + "DED-Statemint": { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "multiLocation": { + "parachainId": 1000, + "palletInstance": 50, + "generalIndex": "30" + } + }, + "KILT": { + "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", + "multiLocation": { + "parachainId": 2086 + } + }, + "MYTH": { + "chainId": "f6ee56e9c5277df5b4ce6ae9983ee88f3cbed27d31beeb98f9f84f997a1ab0b9", + "multiLocation": { + "parachainId": 3369 + } + }, + "NODL": { + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "multiLocation": { + "parachainId": 2026, + "palletInstance": 2 + } + } + }, + "reserveIdOverrides": { + "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d": { + "3": "ACA", + "1": "DOT", + "4": "PARA", + "5": "INTR", + "6": "iBTC", + "10": "USDT-Statemint", + "8": "ASTR", + "11": "CFG", + "22": "MANTA", + "23": "USDC-Statemint", + "16": "NODL" + }, + "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f": { + "0": "DOT-Statemint", + "1": "USDT-Statemint", + "2": "USDC-Statemint" + }, + "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b": { + "3": "USDT-Statemint", + "0": "BNC-Polkadot" + }, + "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6": { + "9": "USDT-Statemint" + } + }, + "chains": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "assetId": 0, + "xcmTransfers": [ + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "executionFee": 83900440 + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "executionFee": 884444 + }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 0, + "executionFee": 17964999 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "executionFee": 48875312 + }, + { + "chainId": "dcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", + "assetId": 0, + "executionFee": 17964999 + }, + { + "chainId": "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", + "assetId": 0, + "executionFee": 18678667 + }, + { + "chainId": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", + "assetId": 0, + "executionFee": 725011 + } + ] + } + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "assetId": 1, + "xcmTransfers": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "executionFee": 21232099 + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "executionFee": 442215926 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "executionFee": 502424974 + } + ] + }, + { + "assetId": 0, + "xcmTransfers": [ + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 2, + "executionFee": 70357520201014 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 1, + "executionFee": 157732441686960096 + } + ] + }, + { + "assetId": 8, + "xcmTransfers": [ + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 0, + "executionFee": 38541720104788624 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 4, + "executionFee": 681771875534110464 + } + ] + }, + { + "assetId": 10, + "xcmTransfers": [ + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "executionFee": 27246 + } + ] + }, + { + "assetId": 23, + "xcmTransfers": [ + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 2, + "executionFee": 27041 + } + ] + } + ] + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assets": [ + { + "assetId": 1, + "xcmTransfers": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "executionFee": 21232099 + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "executionFee": 513335993 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "executionFee": 502424974 + } + ] + }, + { + "assetId": 0, + "xcmTransfers": [ + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 8, + "executionFee": 548257369488055680 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 4, + "executionFee": 636464238385968896 + } + ] + }, + { + "assetId": 2, + "xcmTransfers": [ + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 0, + "executionFee": 9504052500005856 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 1, + "executionFee": 162955244186960608 + } + ] + }, + { + "assetId": 9, + "xcmTransfers": [ + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "executionFee": 27246 + } + ] + } + ] + }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ + { + "assetId": 0, + "xcmTransfers": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "executionFee": 21194889 + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "executionFee": 83900440 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 2, + "executionFee": 48870753 + }, + { + "chainId": "dcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", + "assetId": 0, + "executionFee": 17964999 + }, + { + "chainId": "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", + "assetId": 0, + "executionFee": 18678667 + } + ] + }, + { + "assetId": 1, + "xcmTransfers": [ + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 10, + "executionFee": 83481 + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 9, + "executionFee": 185 + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assetId": 3, + "executionFee": 36165 + } + ] + }, + { + "assetId": 2, + "xcmTransfers": [ + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 23, + "executionFee": 83398 + } + ] + } + ] + }, + { + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "assets": [ + { + "assetId": 2, + "xcmTransfers": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "executionFee": 21232099 + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 1, + "executionFee": 513335993 + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 1, + "executionFee": 442215926 + } + ] + }, + { + "assetId": 1, + "xcmTransfers": [ + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 0, + "executionFee": 9504052500005856 + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 2, + "executionFee": 5293160020201526 + } + ] + }, + { + "assetId": 4, + "xcmTransfers": [ + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assetId": 8, + "executionFee": 593565006636197248 + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assetId": 0, + "executionFee": 38541720104788624 + } + ] + }, + { + "assetId": 3, + "xcmTransfers": [ + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 1, + "executionFee": 27246 + } + ] + } + ] + }, + { + "chainId": "dcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", + "assets": [ + { + "assetId": 0, + "xcmTransfers": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "executionFee": 21194889 + }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 0, + "executionFee": 17964999 + }, + { + "chainId": "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", + "assetId": 0, + "executionFee": 18678667 + } + ] + } + ] + }, + { + "chainId": "46ee89aa2eedd13e988962630ec9fb7565964cf5023bb351f2b6b25c1b68b0b2", + "assets": [ + { + "assetId": 0, + "xcmTransfers": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "executionFee": 21194889 + }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assetId": 0, + "executionFee": 17964999 + }, + { + "chainId": "dcf691b5a3fbe24adc99ddc959c0561b973e329b1aef4c4b22e7bb2ddecb4464", + "assetId": 0, + "executionFee": 17964999 + } + ] + } + ] + }, + { + "chainId": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", + "assets": [ + { + "assetId": 0, + "xcmTransfers": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assetId": 0, + "executionFee": 21194889 + } + ] + } + ] + } + ] +}