mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 10:31:03 +00:00
Adding integration tests (#1426)
* adding parachains integration tests * final integration-tests * Update parachains/integration-tests/statemine/xcm/2_ump.yml Co-authored-by: Chevdor <chevdor@users.noreply.github.com> * Update parachains/integration-tests/statemine/xcm/1_dmp.yml Co-authored-by: Chevdor <chevdor@users.noreply.github.com> * Update parachains/integration-tests/statemine/xcm/4_hrmp.yml Co-authored-by: Chevdor <chevdor@users.noreply.github.com> * Update parachains/integration-tests/statemint/xcm/1_dmp.yml Co-authored-by: Chevdor <chevdor@users.noreply.github.com> * Update parachains/integration-tests/statemint/xcm/2_ump.yml Co-authored-by: Chevdor <chevdor@users.noreply.github.com> * Update parachains/integration-tests/statemint/xcm/4_hrmp.yml Co-authored-by: Chevdor <chevdor@users.noreply.github.com> * Update parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml Co-authored-by: Chevdor <chevdor@users.noreply.github.com> * Update parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml Co-authored-by: Chevdor <chevdor@users.noreply.github.com> * clean up & trailling spaces * leftovers Co-authored-by: Chevdor <chevdor@users.noreply.github.com>
This commit is contained in:
@@ -8,3 +8,4 @@ polkadot_argument_parsing
|
|||||||
**/chains/
|
**/chains/
|
||||||
*.iml
|
*.iml
|
||||||
.env
|
.env
|
||||||
|
bin
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
[relaychain]
|
||||||
|
default_command = "./bin/polkadot"
|
||||||
|
default_args = [ "-lparachain=debug" ]
|
||||||
|
chain = "kusama-local"
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "alice"
|
||||||
|
ws_port = 9900
|
||||||
|
validator = true
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "bob"
|
||||||
|
validator = true
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "charlie"
|
||||||
|
validator = true
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "dave"
|
||||||
|
validator = true
|
||||||
|
|
||||||
|
[[parachains]]
|
||||||
|
id = 1000
|
||||||
|
chain = "statemine-local"
|
||||||
|
cumulus_based = true
|
||||||
|
|
||||||
|
[[parachains.collators]]
|
||||||
|
name = "collator1"
|
||||||
|
ws_port = 9910
|
||||||
|
command = "./bin/polkadot-parachain"
|
||||||
|
|
||||||
|
[[parachains.collators]]
|
||||||
|
name = "collator2"
|
||||||
|
command = "./bin/polkadot-parachain"
|
||||||
|
|
||||||
|
[[parachains]]
|
||||||
|
id = 2000
|
||||||
|
chain = "penpal-kusama-2000"
|
||||||
|
cumulus_based = true
|
||||||
|
|
||||||
|
[[parachains.collators]]
|
||||||
|
name = "collator3"
|
||||||
|
ws_port = 9920
|
||||||
|
command = "./bin/polkadot-parachain"
|
||||||
|
|
||||||
|
[[parachains.collators]]
|
||||||
|
name = "collator4"
|
||||||
|
command = "./bin/polkadot-parachain"
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
penpal_parachain: &penpal_parachain
|
||||||
|
wsPort: 9920
|
||||||
|
paraId: &pp_id 2000
|
||||||
|
variables:
|
||||||
|
common:
|
||||||
|
xcm_verison: &xcm_version '2'
|
||||||
|
require_weight_at_most: &weight_at_most 1000000000
|
||||||
|
chains:
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
penpal_parachain:
|
||||||
|
signer: &pp_signer //Alice
|
||||||
|
decodedCalls:
|
||||||
|
ap_force_xcm_version:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: forceXcmVersion
|
||||||
|
args: [
|
||||||
|
{ # location
|
||||||
|
parents: 1,
|
||||||
|
interior: Here
|
||||||
|
},
|
||||||
|
*xcm_version # xcmVersion
|
||||||
|
]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: Initialize Chains
|
||||||
|
its:
|
||||||
|
- name: XCM supported versions between chains
|
||||||
|
actions:
|
||||||
|
- extrinsics: # Relay Chain sets supported version for Assset Parachain
|
||||||
|
- chain: *relay_chain
|
||||||
|
sudo: true
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: forceXcmVersion
|
||||||
|
args: [
|
||||||
|
{ # location
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X1: {
|
||||||
|
Parachain: *ap_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
*xcm_version # xcmVersion
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attributes:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.SupportedVersionChanged
|
||||||
|
attribute:
|
||||||
|
type: u32
|
||||||
|
value: *xcm_version
|
||||||
|
- extrinsics: # Relay Chain sets supported version for Penpal Parachain
|
||||||
|
- chain: *relay_chain
|
||||||
|
sudo: true
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: forceXcmVersion
|
||||||
|
args: [
|
||||||
|
{ # location
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X1: {
|
||||||
|
Parachain: *pp_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
*xcm_version # xcmVersion
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attributes:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.SupportedVersionChanged
|
||||||
|
attribute:
|
||||||
|
type: u32
|
||||||
|
value: *xcm_version
|
||||||
|
- extrinsics: # Assset Parachain sets supported version for Relay Chain through it
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $ap_force_xcm_version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: polkadotXcm.SupportedVersionChanged
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: u32
|
||||||
|
value: *xcm_version
|
||||||
|
- extrinsics: # Penpal Parachain sets supported version for Relay Chain
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: forceXcmVersion
|
||||||
|
args: [
|
||||||
|
{ # location
|
||||||
|
parents: 1,
|
||||||
|
interior: Here
|
||||||
|
},
|
||||||
|
*xcm_version # xcmVersion
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: polkadotXcm.SupportedVersionChanged
|
||||||
|
attribute:
|
||||||
|
type: u32
|
||||||
|
value: *xcm_version
|
||||||
@@ -0,0 +1,254 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
variables:
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
wallet: &rc_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { parents: 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||||
|
assets_parachain_beneficiary: &ap_benf {v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *ap_acc }}}}}
|
||||||
|
ksm: &rc_ksm { concrete: { parents: 0, interior: { here: true }}}
|
||||||
|
amount: &amount 1000000000000
|
||||||
|
ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }}
|
||||||
|
require_weight_at_most: &rc_weight_at_most 1000000000
|
||||||
|
assets_parachain_account:
|
||||||
|
wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
asset_id: &asset_id 1
|
||||||
|
asset_min_balance: &asset_ed 1000
|
||||||
|
decodedCalls:
|
||||||
|
force_create_asset:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: forceCreate
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
{ Id: *ap_wallet }, # owner
|
||||||
|
true, # isSufficient
|
||||||
|
*asset_ed # minBalance
|
||||||
|
]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: DMP
|
||||||
|
its: []
|
||||||
|
describes:
|
||||||
|
- name: xcmPallet.limitedTeleportAssets
|
||||||
|
before: &before_get_balances
|
||||||
|
- name: Get the balances of the Relay Chain's sender & Assets Parachain's receiver
|
||||||
|
actions:
|
||||||
|
- queries:
|
||||||
|
balance_rc_sender_before:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
balance_ap_receiver_before:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
its:
|
||||||
|
- name: Should teleport native assets from the Relay Chain to the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: limitedTeleportAssets
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
*ap_benf, # beneficiary
|
||||||
|
{ v1: [ *rc_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000,000
|
||||||
|
- queries:
|
||||||
|
balance_rc_sender_after:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
balance_ap_receiver_after:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
|
||||||
|
- name: Should reduce the balance of the sender
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceDecreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_rc_sender_before,
|
||||||
|
after: $balance_rc_sender_after,
|
||||||
|
},
|
||||||
|
amount: *amount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Should increase the balance of the receiver
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceIncreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_ap_receiver_before,
|
||||||
|
after: $balance_ap_receiver_after,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: xcmPallet.send | Superuser - Transact(assets.forceCreate)
|
||||||
|
its:
|
||||||
|
- name: Relay Chain Superuser account SHOULD be able to execute a XCM Transact instruction in the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *rc_weight_at_most,
|
||||||
|
call: $force_create_asset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- queries:
|
||||||
|
forced_created_asset:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: asset
|
||||||
|
args: [ *asset_id ]
|
||||||
|
- asserts:
|
||||||
|
isSome:
|
||||||
|
args: [ $forced_created_asset ]
|
||||||
|
|
||||||
|
- name: xcmPallet.send | Native - Transact(assets.forceCreate)
|
||||||
|
its:
|
||||||
|
- name: Relay Chain Native account SHOULD NOT be able to execute a XCM Transact instruction in the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *rc_weight_at_most,
|
||||||
|
call: $force_create_asset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: system.ExtrinsicFailed
|
||||||
|
attribute:
|
||||||
|
type: SpRuntimeDispatchError
|
||||||
|
value: BadOrigin
|
||||||
|
|
||||||
|
- name: xcmPallet.limitedReserveTransferAssets
|
||||||
|
before: *before_get_balances
|
||||||
|
its:
|
||||||
|
- name: SHOULD NOT reserved transfer native assets from the Relay Chain to the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: limitedReserveTransferAssets
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
*ap_benf, # beneficiary
|
||||||
|
{ v1: [ *rc_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 750,645,000
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isIncomplete: true
|
||||||
|
value: ['1,000,000,000' , UntrustedReserveLocation]
|
||||||
|
- queries:
|
||||||
|
balance_rc_sender_after:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
balance_ap_receiver_after:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
|
||||||
|
- name: Should reduce the balance of the sender
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceDecreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_rc_sender_before,
|
||||||
|
after: $balance_rc_sender_after,
|
||||||
|
},
|
||||||
|
amount: *amount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Should keep the balance of the receiver
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
equal:
|
||||||
|
args:
|
||||||
|
[
|
||||||
|
$balance_ap_receiver_before,
|
||||||
|
$balance_ap_receiver_after
|
||||||
|
]
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
variables:
|
||||||
|
common:
|
||||||
|
amount: &amount 1000000000000
|
||||||
|
require_weight_at_most: &weight_at_most 1000000000
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
wallet: &rc_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F #Alice
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||||
|
assets_parachain_beneficiary: &ap_benf {v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *ap_acc }}}}}
|
||||||
|
ksm: &rc_ksm { concrete: { 0, interior: { here: true }}}
|
||||||
|
ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }}
|
||||||
|
assets_parachain_account:
|
||||||
|
signer: &ap_signer //Alice
|
||||||
|
wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
relay_chain_destination: &rc_dest { v1: { parents: 1, interior: { here: true }}}
|
||||||
|
assets_parachain_account: &rc_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' #Alice
|
||||||
|
relay_chain_beneficiary: &rc_benf {v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *rc_acc }}}}}
|
||||||
|
ksm: &ap_ksm { concrete: { parents: 1, interior: { here: true }}}
|
||||||
|
ksm_fungible: &ap_ksm_fungible { id: *ap_ksm, fun: { fungible: *amount }}
|
||||||
|
decodedCalls:
|
||||||
|
system_remark:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: remark
|
||||||
|
args: [ 0x0011 ]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: UMP
|
||||||
|
describes:
|
||||||
|
- name: polkadotXcm.limitedTeleportAssets
|
||||||
|
before:
|
||||||
|
- name: DEPENDANCY | Do a 'limitedTeleportAssets' from the Relay Chain to the Assets Parachain to have funds to send them back
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: limitedTeleportAssets
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
*ap_benf, # beneficiary
|
||||||
|
{ v1: [ *rc_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000,000
|
||||||
|
|
||||||
|
- name: Get the balances of the Assets Parachain's sender & Relay Chain's receiver
|
||||||
|
actions:
|
||||||
|
- queries:
|
||||||
|
balance_ap_sender_before:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
balance_rc_receiver_before:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
its:
|
||||||
|
- name: Should teleport native assets back from Assets Parachain to the Relay Chain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: limitedTeleportAssets
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
*rc_benf, # beneficiary
|
||||||
|
{ v1: [ *ap_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: polkadotXcm.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
chain: *relay_chain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 297,578,000
|
||||||
|
- queries:
|
||||||
|
balance_ap_sender_after:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
balance_rc_receiver_after:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
|
||||||
|
- name: Should reduce the balance of the sender
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceDecreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_ap_sender_before,
|
||||||
|
after: $balance_ap_sender_after,
|
||||||
|
},
|
||||||
|
amount: *amount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Should increase the balance of the receiver
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceIncreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_rc_receiver_before,
|
||||||
|
after: $balance_rc_receiver_after,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: polkadotXcm.send | Native - Transact(system.remark)
|
||||||
|
its:
|
||||||
|
- name: Assets Parachain SHOULD NOT be able to dipatch 'send' call
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $system_remark
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: system.ExtrinsicFailed
|
||||||
|
attribute:
|
||||||
|
type: SpRuntimeDispatchError
|
||||||
|
value: BadOrigin
|
||||||
|
|
||||||
|
- name: polkadotXcm.limitedReserveTransferAssets
|
||||||
|
its:
|
||||||
|
- name: Should NOT be able to reserve transfer native assets from the Assets Parachain to the Relay Chain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: limitedReserveTransferAssets
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
*rc_benf, # beneficiary
|
||||||
|
{ v1: [ *ap_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: polkadotXcm.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isError: true
|
||||||
|
value: Barrier
|
||||||
@@ -0,0 +1,402 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
penpal_parachain: &penpal_parachain
|
||||||
|
wsPort: 9920
|
||||||
|
paraId: &pp_id 2000
|
||||||
|
variables:
|
||||||
|
common:
|
||||||
|
amount: &amount 2000000000000
|
||||||
|
require_weight_at_most: &weight_at_most 1000000000
|
||||||
|
hrmp_channels:
|
||||||
|
proposed_max_capacity: &max_capacity 8
|
||||||
|
proposed_max_message_size: &max_message_size 8192
|
||||||
|
channel: &channel {
|
||||||
|
maxCapacity: 8,
|
||||||
|
maxTotalSize: 8192,
|
||||||
|
maxMessageSize: 8192,
|
||||||
|
msgCount: 0,
|
||||||
|
totalSize: 0,
|
||||||
|
mqcHead: null,
|
||||||
|
senderDeposit: 0,
|
||||||
|
recipientDeposit: 0
|
||||||
|
}
|
||||||
|
chains:
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||||
|
assets_parachain_beneficiary: &ap_benf {v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *ap_acc }}}}}
|
||||||
|
ksm: &rc_ksm { concrete: { 0, interior: { here: true }}}
|
||||||
|
ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }}
|
||||||
|
assets_parachain_account:
|
||||||
|
sovereign_account: &ap_sovereign F7fq1jSNVTPfJmaHaXCMtatT1EZefCUsa7rRiQVNR5efcah
|
||||||
|
relay_chain_destination: &rc_dest { v1: { parents: 1, interior: { here: true }}}
|
||||||
|
penpal_parachain:
|
||||||
|
sovereign_account: &pp_sovereign F7fq1jMZkfuCuoMTyiEVAP2DMpMt18WopgBqTJznLihLNbZ
|
||||||
|
signer: &pp_signer //Alice
|
||||||
|
decodedCalls:
|
||||||
|
init_open_channel_with_ap:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpInitOpenChannel
|
||||||
|
args: [
|
||||||
|
*ap_id, # recipient
|
||||||
|
*max_capacity, # proposedMaxCapacity
|
||||||
|
*max_message_size # proposedMaxMessageSize
|
||||||
|
]
|
||||||
|
init_open_channel_with_cp:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpInitOpenChannel
|
||||||
|
args: [
|
||||||
|
*pp_id, # recipient
|
||||||
|
*max_capacity, # proposedMaxCapacity
|
||||||
|
*max_message_size # proposedMaxMessageSize
|
||||||
|
]
|
||||||
|
accept_open_channel_with_ap:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpAcceptOpenChannel
|
||||||
|
args: [
|
||||||
|
*ap_id, # recipient
|
||||||
|
]
|
||||||
|
accept_init_open_request_from_cp:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpAcceptOpenChannel
|
||||||
|
args: [
|
||||||
|
*pp_id, # sender
|
||||||
|
]
|
||||||
|
xcm_accept_init_open_request_from_cp:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*rc_ksm_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *rc_ksm_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $accept_init_open_request_from_cp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
xcm_init_open_channel_with_cp:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*rc_ksm_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *rc_ksm_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $init_open_channel_with_cp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: HRMP
|
||||||
|
beforeEach:
|
||||||
|
- name: DEPENDANCY | Penpal Parachain Sovereign account in the Relay Chain needs to be funded
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: balances
|
||||||
|
call: transfer
|
||||||
|
args: [
|
||||||
|
*pp_sovereign, # destination
|
||||||
|
*amount, # value
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: balances.Transfer
|
||||||
|
|
||||||
|
- name: DEPENDANCY | Assets Parachain Sovereign account in the Relay Chain needs to be funded
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: balances
|
||||||
|
call: transfer
|
||||||
|
args: [
|
||||||
|
*ap_sovereign, # destination
|
||||||
|
*amount, # value
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: balances.Transfer
|
||||||
|
describes:
|
||||||
|
- name: hrmp.hrmpInitOpenChannel (Penpal Parachain → Assets Parachain)
|
||||||
|
its:
|
||||||
|
- name: Penpal Parachain sends a request to the Relay Chain to open a channel with the Assets Parchain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*rc_ksm_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *rc_ksm_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $init_open_channel_with_ap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
chain: *relay_chain
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000
|
||||||
|
- name: hrmp.OpenChannelRequested
|
||||||
|
chain: *relay_chain
|
||||||
|
- queries:
|
||||||
|
requested_channels:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpOpenChannelRequestsList
|
||||||
|
args: []
|
||||||
|
- asserts:
|
||||||
|
equal:
|
||||||
|
args: [
|
||||||
|
$requested_channels,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
sender: *pp_id,
|
||||||
|
recipient: *ap_id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: hrmp.hrmpAcceptOpenChannel (Assets Parachain → Penpal Parachain)
|
||||||
|
its:
|
||||||
|
- name: Assets Parachain sends a response to the Relay Chain accepting the Penpal Parachain's request for openning a HRMP channel
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $xcm_accept_init_open_request_from_cp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
chain: *assets_parachain
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
timeout: 40000
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 1,160,892,000
|
||||||
|
- name: hrmp.OpenChannelAccepted
|
||||||
|
timeout: 40000
|
||||||
|
- queries:
|
||||||
|
open_channels:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpChannels
|
||||||
|
delay: 80000
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
sender: *pp_id,
|
||||||
|
recipient: *ap_id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
- asserts:
|
||||||
|
equal:
|
||||||
|
args: [
|
||||||
|
$open_channels,
|
||||||
|
*channel
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: hrmp.hrmpInitOpenChannel (Assets Parachain → Penpal Parachain)
|
||||||
|
its:
|
||||||
|
- name: Assets Parchain sends a request to the Relay Chain to open a channel with a Penpal Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $xcm_init_open_channel_with_cp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
chain: *assets_parachain
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
timeout: 40000
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 1,160,892,000
|
||||||
|
- name: hrmp.OpenChannelRequested
|
||||||
|
timeout: 40000
|
||||||
|
- queries:
|
||||||
|
requested_channels:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpOpenChannelRequestsList
|
||||||
|
args: []
|
||||||
|
- asserts:
|
||||||
|
equal:
|
||||||
|
args: [
|
||||||
|
$requested_channels,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
sender: *ap_id,
|
||||||
|
recipient: *pp_id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: hrmp.hrmpAcceptOpenChannel (Penpal Parachain → Assets Parachain)
|
||||||
|
its:
|
||||||
|
- name: Penpal Parachain sends a response to the Relay Chain accepting the Assets Parachain's request for openning a HRMP channel
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*rc_ksm_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *rc_ksm_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $accept_open_channel_with_ap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
chain: *relay_chain
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000
|
||||||
|
- name: hrmp.OpenChannelAccepted
|
||||||
|
chain: *relay_chain
|
||||||
@@ -0,0 +1,353 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
penpal_parachain: &penpal_parachain
|
||||||
|
wsPort: 9920
|
||||||
|
paraId: &pp_id 2000
|
||||||
|
variables:
|
||||||
|
common:
|
||||||
|
amount: &amount 1000000000000
|
||||||
|
require_weight_at_most: &weight_at_most 1000000000
|
||||||
|
amount_to_send: &amount_to_send 500000000000
|
||||||
|
chains:
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
assets_parachain_dest_routed: &ap_dest_routed { v1: { parents: 1, interior: { x1: { parachain: *ap_id } }}}
|
||||||
|
assets_parachain_account:
|
||||||
|
signer: &ap_signer //Alice
|
||||||
|
wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
asset_id: &asset_id 2
|
||||||
|
assets_pallet_id: &assets_pallet_id 50
|
||||||
|
asset_min_balance: &asset_ed 1000
|
||||||
|
penpal_parachain_destination: &pp_dest { v1: { parents: 1, interior: { x1: { parachain: *pp_id } }}}
|
||||||
|
ksm: &ap_ksm { concrete: { parents: 1, interior: { here: true }}}
|
||||||
|
ksm_fungible: &ap_ksm_fungible { id: *ap_ksm, fun: { fungible: *amount }}
|
||||||
|
suff_asset: &suff_asset { concrete: { parents: 0, interior: { x2: [ { PalletInstance: *assets_pallet_id }, { GeneralIndex: *asset_id } ] }}}
|
||||||
|
suff_asset_fail: &suff_asset_fail { concrete: { parents: 0, interior: { x2: [ { PalletInstance: *assets_pallet_id }, { GeneralIndex: 3 } ] }}}
|
||||||
|
suff_asset_fungible: &ap_suff_asset_fungible { id: *suff_asset, fun: { fungible: *weight_at_most }}
|
||||||
|
suff_asset_fungible_fail: &ap_suff_asset_fungible_fail { id: *suff_asset_fail, fun: { fungible: *weight_at_most }}
|
||||||
|
penpal_parachain:
|
||||||
|
sovereign_account: &pp_sovereign_sibl FBeL7EAeUroLWXW1yfKboiqTqVfbRBcsUKd6QqVf4kGBySS
|
||||||
|
signer: &pp_signer //Alice
|
||||||
|
penpal_parachain_account: &pp_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||||
|
decodedCalls:
|
||||||
|
force_create_asset:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: forceCreate
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
{ Id: *ap_wallet }, # owner
|
||||||
|
true, # isSufficient
|
||||||
|
*asset_ed # minBalance
|
||||||
|
]
|
||||||
|
system_remark_with_event:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: remarkWithEvent
|
||||||
|
args: [ 0x0011 ]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: HRMP
|
||||||
|
describes:
|
||||||
|
- name: polkadotXcm.limitedReserveTransferAssets (Asset) | Assets Parachain -> Penpal Parachain
|
||||||
|
before:
|
||||||
|
- name: DEPENDANCY | A sufficient Asset should exist in the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $force_create_asset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- queries:
|
||||||
|
forced_created_asset:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: asset
|
||||||
|
args: [ *asset_id ]
|
||||||
|
- asserts:
|
||||||
|
isSome:
|
||||||
|
args: [ $forced_created_asset ]
|
||||||
|
|
||||||
|
- name: DEPENDANCY | Some Assets should be minted for the sender
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: assets
|
||||||
|
call: mint
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
*ap_wallet,
|
||||||
|
*amount
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: assets.Issued
|
||||||
|
|
||||||
|
its:
|
||||||
|
- name: Assets Parachain should be able to reserve transfer an Asset to Penpal Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: limitedReserveTransferAssets
|
||||||
|
args: [
|
||||||
|
*pp_dest, # destination
|
||||||
|
{ # beneficiary
|
||||||
|
V1: {
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X1: {
|
||||||
|
AccountId32: {
|
||||||
|
network: Any,
|
||||||
|
id: *pp_acc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ # assets
|
||||||
|
V1: [
|
||||||
|
{
|
||||||
|
id: {
|
||||||
|
Concrete: {
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X2: [
|
||||||
|
{
|
||||||
|
PalletInstance: 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
GeneralIndex: *asset_id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fun: {
|
||||||
|
Fungible: *amount_to_send
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
0, # feeAssetItem
|
||||||
|
Unlimited # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: polkadotXcm.Attempted
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 1,000,000,000
|
||||||
|
- name: assets.Transferred
|
||||||
|
attributes:
|
||||||
|
type: AccountId32
|
||||||
|
value: *pp_sovereign_sibl
|
||||||
|
- name: assets.Transferred
|
||||||
|
attributes:
|
||||||
|
type: u128
|
||||||
|
value: *amount_to_send
|
||||||
|
|
||||||
|
- name: polkadotXcm.limitedReserveTransferAssets (KSM) | Assets Parachain -> Penpal Parachain
|
||||||
|
its:
|
||||||
|
- name: Assets Parachain should be able to reserve transfer KSM to Penpal Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: limitedReserveTransferAssets
|
||||||
|
args: [
|
||||||
|
*pp_dest, # destination
|
||||||
|
{ # beneficiary
|
||||||
|
V1: {
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X1: {
|
||||||
|
AccountId32: {
|
||||||
|
network: Any,
|
||||||
|
id: *pp_acc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ # assets
|
||||||
|
V1: [
|
||||||
|
*ap_ksm_fungible
|
||||||
|
]
|
||||||
|
},
|
||||||
|
0, # feeAssetItem
|
||||||
|
Unlimited # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: polkadotXcm.Attempted
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 1,000,000,000
|
||||||
|
- name: balances.Endowed
|
||||||
|
attributes:
|
||||||
|
type: AccountId32
|
||||||
|
value: *pp_sovereign_sibl
|
||||||
|
- name: balances.Endowed
|
||||||
|
attributes:
|
||||||
|
type: u128
|
||||||
|
value: *amount
|
||||||
|
|
||||||
|
- name: polkadotXcm.send( system.remarkWithEvent() ) | Penpal Parachain -> Assets Parachain
|
||||||
|
before:
|
||||||
|
- name: Get the asset balance of the Penpal Parachain Sovereign account in Assets Parachain
|
||||||
|
actions:
|
||||||
|
- queries:
|
||||||
|
assets_balance_pp_sovereign_before:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: account
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
*pp_sovereign_sibl
|
||||||
|
]
|
||||||
|
its:
|
||||||
|
- name: Penpal Parachain should be able to send XCM message paying its fee with sufficient asset in Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest_routed, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*ap_suff_asset_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *ap_suff_asset_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: SovereignAccount,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $system_remark_with_event
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
- name: assets.Burned
|
||||||
|
chain: *assets_parachain
|
||||||
|
attributes:
|
||||||
|
type: AccountId32
|
||||||
|
value: *pp_sovereign_sibl
|
||||||
|
- name: assets.Issued
|
||||||
|
chain: *assets_parachain
|
||||||
|
attributes:
|
||||||
|
type: u32
|
||||||
|
value: *asset_id
|
||||||
|
- name: system.Remarked
|
||||||
|
chain: *assets_parachain
|
||||||
|
attributes:
|
||||||
|
type: AccountId32
|
||||||
|
value: *pp_sovereign_sibl
|
||||||
|
- queries:
|
||||||
|
assets_balance_pp_sovereign_after:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: account
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
*pp_sovereign_sibl
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Should reduce the assets balance of the Penpal Parachain's SovereignAccount in the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
assetsDecreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $assets_balance_pp_sovereign_before,
|
||||||
|
after: $assets_balance_pp_sovereign_after,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Penpal Parachain SHOULD NOT be able to send XCM message paying its fee with sufficient assets if not enough balance
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest_routed, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*ap_suff_asset_fungible_fail]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *ap_suff_asset_fungible_fail,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: SovereignAccount,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $system_remark_with_event
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmpQueue.Fail
|
||||||
|
chain: *assets_parachain
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsError
|
||||||
|
value: FailedToTransactAsset
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
[relaychain]
|
||||||
|
default_command = "./bin/polkadot"
|
||||||
|
default_args = [ "-lparachain=debug" ]
|
||||||
|
chain = "polkadot-local"
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "alice"
|
||||||
|
ws_port = 9900
|
||||||
|
validator = true
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "bob"
|
||||||
|
validator = true
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "charlie"
|
||||||
|
validator = true
|
||||||
|
|
||||||
|
[[relaychain.nodes]]
|
||||||
|
name = "dave"
|
||||||
|
validator = true
|
||||||
|
|
||||||
|
[[parachains]]
|
||||||
|
id = 1000
|
||||||
|
chain = "statemint-local"
|
||||||
|
cumulus_based = true
|
||||||
|
|
||||||
|
[[parachains.collators]]
|
||||||
|
name = "collator1"
|
||||||
|
ws_port = 9910
|
||||||
|
command = "./bin/polkadot-parachain"
|
||||||
|
|
||||||
|
[[parachains.collators]]
|
||||||
|
name = "collator2"
|
||||||
|
command = "./bin/polkadot-parachain"
|
||||||
|
|
||||||
|
[[parachains]]
|
||||||
|
id = 2000
|
||||||
|
chain = "penpal-polkadot-2000"
|
||||||
|
cumulus_based = true
|
||||||
|
|
||||||
|
[[parachains.collators]]
|
||||||
|
name = "collator3"
|
||||||
|
ws_port = 9920
|
||||||
|
command = "./bin/polkadot-parachain"
|
||||||
|
|
||||||
|
[[parachains.collators]]
|
||||||
|
name = "collator4"
|
||||||
|
command = "./bin/polkadot-parachain"
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
penpal_parachain: &penpal_parachain
|
||||||
|
wsPort: 9920
|
||||||
|
paraId: &pp_id 2000
|
||||||
|
variables:
|
||||||
|
common:
|
||||||
|
xcm_verison: &xcm_version '2'
|
||||||
|
require_weight_at_most: &weight_at_most 1000000000
|
||||||
|
chains:
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
penpal_parachain:
|
||||||
|
signer: &pp_signer //Alice
|
||||||
|
decodedCalls:
|
||||||
|
ap_force_xcm_version:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: forceXcmVersion
|
||||||
|
args: [
|
||||||
|
{ # location
|
||||||
|
parents: 1,
|
||||||
|
interior: Here
|
||||||
|
},
|
||||||
|
*xcm_version # xcmVersion
|
||||||
|
]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: Initialize Chains
|
||||||
|
its:
|
||||||
|
- name: XCM supported versions between chains
|
||||||
|
actions:
|
||||||
|
- extrinsics: # Relay Chain sets supported version for Assset Parachain
|
||||||
|
- chain: *relay_chain
|
||||||
|
sudo: true
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: forceXcmVersion
|
||||||
|
args: [
|
||||||
|
{ # location
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X1: {
|
||||||
|
Parachain: *ap_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
*xcm_version # xcmVersion
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attributes:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.SupportedVersionChanged
|
||||||
|
attribute:
|
||||||
|
type: u32
|
||||||
|
value: *xcm_version
|
||||||
|
- extrinsics: # Relay Chain sets supported version for Penpal Parachain
|
||||||
|
- chain: *relay_chain
|
||||||
|
sudo: true
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: forceXcmVersion
|
||||||
|
args: [
|
||||||
|
{ # location
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X1: {
|
||||||
|
Parachain: *pp_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
*xcm_version # xcmVersion
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attributes:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.SupportedVersionChanged
|
||||||
|
attribute:
|
||||||
|
type: u32
|
||||||
|
value: *xcm_version
|
||||||
|
- extrinsics: # Assset Parachain sets supported version for Relay Chain through it
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $ap_force_xcm_version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: polkadotXcm.SupportedVersionChanged
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: u32
|
||||||
|
value: *xcm_version
|
||||||
|
- extrinsics: # Penpal Parachain sets supported version for Relay Chain
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: forceXcmVersion
|
||||||
|
args: [
|
||||||
|
{ # location
|
||||||
|
parents: 1,
|
||||||
|
interior: Here
|
||||||
|
},
|
||||||
|
*xcm_version # xcmVersion
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: polkadotXcm.SupportedVersionChanged
|
||||||
|
attribute:
|
||||||
|
type: u32
|
||||||
|
value: *xcm_version
|
||||||
@@ -0,0 +1,254 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
variables:
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
wallet: &rc_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { parents: 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||||
|
assets_parachain_beneficiary: &ap_benf {v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *ap_acc }}}}}
|
||||||
|
ksm: &rc_ksm { concrete: { parents: 0, interior: { here: true }}}
|
||||||
|
amount: &amount 1000000000000
|
||||||
|
ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }}
|
||||||
|
require_weight_at_most: &rc_weight_at_most 1000000000
|
||||||
|
assets_parachain_account:
|
||||||
|
wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
asset_id: &asset_id 1
|
||||||
|
asset_min_balance: &asset_ed 1000
|
||||||
|
decodedCalls:
|
||||||
|
force_create_asset:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: forceCreate
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
{ Id: *ap_wallet }, # owner
|
||||||
|
true, # isSufficient
|
||||||
|
*asset_ed # minBalance
|
||||||
|
]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: DMP
|
||||||
|
its: []
|
||||||
|
describes:
|
||||||
|
- name: xcmPallet.limitedTeleportAssets
|
||||||
|
before: &before_get_balances
|
||||||
|
- name: Get the balances of the Relay Chain's sender & Assets Parachain's receiver
|
||||||
|
actions:
|
||||||
|
- queries:
|
||||||
|
balance_rc_sender_before:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
balance_ap_receiver_before:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
its:
|
||||||
|
- name: Should teleport native assets from the Relay Chain to the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: limitedTeleportAssets
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
*ap_benf, # beneficiary
|
||||||
|
{ v1: [ *rc_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000,000
|
||||||
|
- queries:
|
||||||
|
balance_rc_sender_after:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
balance_ap_receiver_after:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
|
||||||
|
- name: Should reduce the balance of the sender
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceDecreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_rc_sender_before,
|
||||||
|
after: $balance_rc_sender_after,
|
||||||
|
},
|
||||||
|
amount: *amount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Should increase the balance of the receiver
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceIncreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_ap_receiver_before,
|
||||||
|
after: $balance_ap_receiver_after,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: xcmPallet.send | Superuser - Transact(assets.forceCreate)
|
||||||
|
its:
|
||||||
|
- name: Relay Chain Superuser account SHOULD be able to execute a XCM Transact instruction in the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *rc_weight_at_most,
|
||||||
|
call: $force_create_asset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- queries:
|
||||||
|
forced_created_asset:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: asset
|
||||||
|
args: [ *asset_id ]
|
||||||
|
- asserts:
|
||||||
|
isSome:
|
||||||
|
args: [ $forced_created_asset ]
|
||||||
|
|
||||||
|
- name: xcmPallet.send | Native - Transact(assets.forceCreate)
|
||||||
|
its:
|
||||||
|
- name: Relay Chain Native account SHOULD NOT be able to execute a XCM Transact instruction in the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *rc_weight_at_most,
|
||||||
|
call: $force_create_asset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: system.ExtrinsicFailed
|
||||||
|
attribute:
|
||||||
|
type: SpRuntimeDispatchError
|
||||||
|
value: BadOrigin
|
||||||
|
|
||||||
|
- name: xcmPallet.limitedReserveTransferAssets
|
||||||
|
before: *before_get_balances
|
||||||
|
its:
|
||||||
|
- name: SHOULD NOT reserved transfer native assets from the Relay Chain to the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: limitedReserveTransferAssets
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
*ap_benf, # beneficiary
|
||||||
|
{ v1: [ *rc_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 1,000,000,000
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isIncomplete: true
|
||||||
|
value: ['1,000,000,000' , UntrustedReserveLocation]
|
||||||
|
- queries:
|
||||||
|
balance_rc_sender_after:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
balance_ap_receiver_after:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
|
||||||
|
- name: Should reduce the balance of the sender
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceDecreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_rc_sender_before,
|
||||||
|
after: $balance_rc_sender_after,
|
||||||
|
},
|
||||||
|
amount: *amount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Should keep the balance of the receiver
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
equal:
|
||||||
|
args:
|
||||||
|
[
|
||||||
|
$balance_ap_receiver_before,
|
||||||
|
$balance_ap_receiver_after
|
||||||
|
]
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
variables:
|
||||||
|
common:
|
||||||
|
amount: &amount 1000000000000
|
||||||
|
require_weight_at_most: &weight_at_most 1000000000
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
wallet: &rc_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
assets_parachain_account: &ap_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||||
|
assets_parachain_beneficiary: &ap_benf {v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *ap_acc }}}}}
|
||||||
|
ksm: &rc_ksm { concrete: { 0, interior: { here: true }}}
|
||||||
|
ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }}
|
||||||
|
assets_parachain_account:
|
||||||
|
signer: &ap_signer //Alice
|
||||||
|
wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
relay_chain_destination: &rc_dest { v1: { parents: 1, interior: { here: true }}}
|
||||||
|
assets_parachain_account: &rc_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||||
|
relay_chain_beneficiary: &rc_benf {v1: { parents: 0, interior: { x1: { accountId32: { network: { any: true }, id: *rc_acc }}}}}
|
||||||
|
ksm: &ap_ksm { concrete: { parents: 1, interior: { here: true }}}
|
||||||
|
ksm_fungible: &ap_ksm_fungible { id: *ap_ksm, fun: { fungible: *amount }}
|
||||||
|
decodedCalls:
|
||||||
|
system_remark:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: remark
|
||||||
|
args: [ 0x0011 ]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: UMP
|
||||||
|
describes:
|
||||||
|
- name: polkadotXcm.limitedTeleportAssets
|
||||||
|
before:
|
||||||
|
- name: DEPENDANCY | Do a 'limitedTeleportAssets' from the Relay Chain to the Assets Parachain to have funds to send them back
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: limitedTeleportAssets
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
*ap_benf, # beneficiary
|
||||||
|
{ v1: [ *rc_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000,000
|
||||||
|
|
||||||
|
- name: Get the balances of the Assets Parachain's sender & Relay Chain's receiver
|
||||||
|
actions:
|
||||||
|
- queries:
|
||||||
|
balance_ap_sender_before:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
balance_rc_receiver_before:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
|
||||||
|
its:
|
||||||
|
- name: Should be able to teleport native assets back from Assets Parachain to the Relay Chain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: limitedTeleportAssets
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
*rc_benf, # beneficiary
|
||||||
|
{ v1: [ *ap_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: polkadotXcm.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
chain: *relay_chain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000,000
|
||||||
|
- queries:
|
||||||
|
balance_ap_sender_after:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *ap_wallet ]
|
||||||
|
balance_rc_receiver_after:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: system
|
||||||
|
call: account
|
||||||
|
args: [ *rc_wallet ]
|
||||||
|
|
||||||
|
- name: Should reduce the balance of the sender
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceDecreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_ap_sender_before,
|
||||||
|
after: $balance_ap_sender_after,
|
||||||
|
},
|
||||||
|
amount: *amount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Should increase the balance of the receiver
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
balanceIncreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $balance_rc_receiver_before,
|
||||||
|
after: $balance_rc_receiver_after,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: polkadotXcm.send | Native - Transact(system.remark)
|
||||||
|
its:
|
||||||
|
- name: Assets Parachain SHOULD NOT be able to dipatch 'send' call
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $system_remark
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: system.ExtrinsicFailed
|
||||||
|
attribute:
|
||||||
|
type: SpRuntimeDispatchError
|
||||||
|
value: BadOrigin
|
||||||
|
|
||||||
|
- name: polkadotXcm.limitedReserveTransferAssets
|
||||||
|
its:
|
||||||
|
- name: Should NOT be able to reserve transfer native assets from the Assets Parachain to the Relay Chain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: limitedReserveTransferAssets
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
*rc_benf, # beneficiary
|
||||||
|
{ v1: [ *ap_ksm_fungible ] }, # assets
|
||||||
|
0, # feeAssetItem
|
||||||
|
{ unlimited: true } # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: polkadotXcm.Attempted
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isError: true
|
||||||
|
value: Barrier
|
||||||
@@ -0,0 +1,400 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
penpal_parachain: &penpal_parachain
|
||||||
|
wsPort: 9920
|
||||||
|
paraId: &pp_id 2000
|
||||||
|
variables:
|
||||||
|
common:
|
||||||
|
amount: &amount 2000000000000
|
||||||
|
require_weight_at_most: &weight_at_most 1000000000
|
||||||
|
hrmp_channels:
|
||||||
|
proposed_max_capacity: &max_capacity 8
|
||||||
|
proposed_max_message_size: &max_message_size 8192
|
||||||
|
channel: &channel {
|
||||||
|
maxCapacity: 8,
|
||||||
|
maxTotalSize: 8192,
|
||||||
|
maxMessageSize: 8192,
|
||||||
|
msgCount: 0,
|
||||||
|
totalSize: 0,
|
||||||
|
mqcHead: null,
|
||||||
|
senderDeposit: 0,
|
||||||
|
recipientDeposit: 0
|
||||||
|
}
|
||||||
|
chains:
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
ksm: &rc_ksm { concrete: { 0, interior: { here: true }}}
|
||||||
|
ksm_fungible: &rc_ksm_fungible { id: *rc_ksm, fun: { fungible: *amount }}
|
||||||
|
assets_parachain_account:
|
||||||
|
sovereign_account: &ap_sovereign F7fq1jSNVTPfJmaHaXCMtatT1EZefCUsa7rRiQVNR5efcah
|
||||||
|
relay_chain_destination: &rc_dest { v1: { parents: 1, interior: { here: true }}}
|
||||||
|
penpal_parachain:
|
||||||
|
sovereign_account: &pp_sovereign F7fq1jMZkfuCuoMTyiEVAP2DMpMt18WopgBqTJznLihLNbZ
|
||||||
|
signer: &pp_signer //Alice
|
||||||
|
decodedCalls:
|
||||||
|
init_open_channel_with_ap:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpInitOpenChannel
|
||||||
|
args: [
|
||||||
|
*ap_id, # recipient
|
||||||
|
*max_capacity, # proposedMaxCapacity
|
||||||
|
*max_message_size # proposedMaxMessageSize
|
||||||
|
]
|
||||||
|
init_open_channel_with_cp:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpInitOpenChannel
|
||||||
|
args: [
|
||||||
|
*pp_id, # recipient
|
||||||
|
*max_capacity, # proposedMaxCapacity
|
||||||
|
*max_message_size # proposedMaxMessageSize
|
||||||
|
]
|
||||||
|
accept_open_channel_with_ap:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpAcceptOpenChannel
|
||||||
|
args: [
|
||||||
|
*ap_id, # recipient
|
||||||
|
]
|
||||||
|
accept_init_open_request_from_cp:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpAcceptOpenChannel
|
||||||
|
args: [
|
||||||
|
*pp_id, # sender
|
||||||
|
]
|
||||||
|
xcm_accept_init_open_request_from_cp:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*rc_ksm_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *rc_ksm_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $accept_init_open_request_from_cp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
xcm_init_open_channel_with_cp:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*rc_ksm_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *rc_ksm_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $init_open_channel_with_cp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: HRMP
|
||||||
|
beforeEach:
|
||||||
|
- name: DEPENDANCY | Penpal Parachain Sovereign account in the Relay Chain needs to be funded
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: balances
|
||||||
|
call: transfer
|
||||||
|
args: [
|
||||||
|
*pp_sovereign, # destination
|
||||||
|
*amount, # value
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: balances.Transfer
|
||||||
|
|
||||||
|
- name: DEPENDANCY | Assets Parachain Sovereign account in the Relay Chain needs to be funded
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
pallet: balances
|
||||||
|
call: transfer
|
||||||
|
args: [
|
||||||
|
*ap_sovereign, # destination
|
||||||
|
*amount, # value
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: balances.Transfer
|
||||||
|
describes:
|
||||||
|
- name: hrmp.hrmpInitOpenChannel (Penpal Parachain → Assets Parachain)
|
||||||
|
its:
|
||||||
|
- name: Penpal Parachain sends a request to the Relay Chain to open a channel with the Assets Parchain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*rc_ksm_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *rc_ksm_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $init_open_channel_with_ap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
chain: *relay_chain
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000
|
||||||
|
- name: hrmp.OpenChannelRequested
|
||||||
|
chain: *relay_chain
|
||||||
|
- queries:
|
||||||
|
requested_channels:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpOpenChannelRequestsList
|
||||||
|
args: []
|
||||||
|
- asserts:
|
||||||
|
equal:
|
||||||
|
args: [
|
||||||
|
$requested_channels,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
sender: *pp_id,
|
||||||
|
recipient: *ap_id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: hrmp.hrmpAcceptOpenChannel (Assets Parachain → Penpal Parachain)
|
||||||
|
its:
|
||||||
|
- name: Assets Parachain sends a response to the Relay Chain accepting the Penpal Parachain's request for openning a HRMP channel
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $xcm_accept_init_open_request_from_cp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
chain: *assets_parachain
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
timeout: 40000
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000,000
|
||||||
|
- name: hrmp.OpenChannelAccepted
|
||||||
|
timeout: 40000
|
||||||
|
- queries:
|
||||||
|
open_channels:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpChannels
|
||||||
|
delay: 80000
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
sender: *pp_id,
|
||||||
|
recipient: *ap_id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
- asserts:
|
||||||
|
equal:
|
||||||
|
args: [
|
||||||
|
$open_channels,
|
||||||
|
*channel
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: hrmp.hrmpInitOpenChannel (Assets Parachain → Penpal Parachain)
|
||||||
|
its:
|
||||||
|
- name: Assets Parchain sends a request to the Relay Chain to open a channel with a Penpal Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $xcm_init_open_channel_with_cp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
chain: *assets_parachain
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
timeout: 40000
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000,000
|
||||||
|
- name: hrmp.OpenChannelRequested
|
||||||
|
timeout: 40000
|
||||||
|
- queries:
|
||||||
|
requested_channels:
|
||||||
|
chain: *relay_chain
|
||||||
|
pallet: hrmp
|
||||||
|
call: hrmpOpenChannelRequestsList
|
||||||
|
args: []
|
||||||
|
- asserts:
|
||||||
|
equal:
|
||||||
|
args: [
|
||||||
|
$requested_channels,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
sender: *ap_id,
|
||||||
|
recipient: *pp_id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: hrmp.hrmpAcceptOpenChannel (Penpal Parachain → Assets Parachain)
|
||||||
|
its:
|
||||||
|
- name: Penpal Parachain sends a response to the Relay Chain accepting the Assets Parachain's request for openning a HRMP channel
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*rc_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*rc_ksm_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *rc_ksm_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Native,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $accept_open_channel_with_ap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
- name: ump.ExecutedUpward
|
||||||
|
chain: *relay_chain
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 4,000,000
|
||||||
|
- name: hrmp.OpenChannelAccepted
|
||||||
|
chain: *relay_chain
|
||||||
@@ -0,0 +1,352 @@
|
|||||||
|
---
|
||||||
|
settings:
|
||||||
|
chains:
|
||||||
|
relay_chain: &relay_chain
|
||||||
|
wsPort: 9900
|
||||||
|
assets_parachain: &assets_parachain
|
||||||
|
wsPort: 9910
|
||||||
|
paraId: &ap_id 1000
|
||||||
|
penpal_parachain: &penpal_parachain
|
||||||
|
wsPort: 9920
|
||||||
|
paraId: &pp_id 2000
|
||||||
|
variables:
|
||||||
|
common:
|
||||||
|
amount: &amount 1000000000000
|
||||||
|
require_weight_at_most: &weight_at_most 1000000000
|
||||||
|
amount_to_send: &amount_to_send 500000000000
|
||||||
|
chains:
|
||||||
|
relay_chain:
|
||||||
|
signer: &rc_signer //Alice
|
||||||
|
assets_parachain_destination: &ap_dest { v1: { 0, interior: { x1: { parachain: *ap_id }}}}
|
||||||
|
assets_parachain_dest_routed: &ap_dest_routed { v1: { parents: 1, interior: { x1: { parachain: *ap_id } }}}
|
||||||
|
assets_parachain_account:
|
||||||
|
signer: &ap_signer //Alice
|
||||||
|
wallet: &ap_wallet HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
|
||||||
|
asset_id: &asset_id 2
|
||||||
|
assets_pallet_id: &assets_pallet_id 50
|
||||||
|
asset_min_balance: &asset_ed 1000
|
||||||
|
penpal_parachain_destination: &pp_dest { v1: { parents: 1, interior: { x1: { parachain: *pp_id } }}}
|
||||||
|
ksm: &ap_ksm { concrete: { parents: 1, interior: { here: true }}}
|
||||||
|
ksm_fungible: &ap_ksm_fungible { id: *ap_ksm, fun: { fungible: *amount }}
|
||||||
|
suff_asset: &suff_asset { concrete: { parents: 0, interior: { x2: [ { PalletInstance: *assets_pallet_id }, { GeneralIndex: *asset_id } ] }}}
|
||||||
|
suff_asset_fail: &suff_asset_fail { concrete: { parents: 0, interior: { x2: [ { PalletInstance: *assets_pallet_id }, { GeneralIndex: 3 } ] }}}
|
||||||
|
suff_asset_fungible: &ap_suff_asset_fungible { id: *suff_asset, fun: { fungible: *weight_at_most }}
|
||||||
|
suff_asset_fungible_fail: &ap_suff_asset_fungible_fail { id: *suff_asset_fail, fun: { fungible: *weight_at_most }}
|
||||||
|
penpal_parachain:
|
||||||
|
sovereign_account: &pp_sovereign_sibl FBeL7EAeUroLWXW1yfKboiqTqVfbRBcsUKd6QqVf4kGBySS
|
||||||
|
signer: &pp_signer //Alice
|
||||||
|
penpal_parachain_account: &pp_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||||
|
decodedCalls:
|
||||||
|
force_create_asset:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: forceCreate
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
{ Id: *ap_wallet }, # owner
|
||||||
|
true, # isSufficient
|
||||||
|
*asset_ed # minBalance
|
||||||
|
]
|
||||||
|
system_remark_with_event:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: system
|
||||||
|
call: remarkWithEvent
|
||||||
|
args: [ 0x0011 ]
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: HRMP
|
||||||
|
describes:
|
||||||
|
- name: polkadotXcm.limitedReserveTransferAssets (Asset) | Assets Parachain -> Penpal Parachain
|
||||||
|
before:
|
||||||
|
- name: DEPENDANCY | A sufficient Asset should exist in the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *relay_chain
|
||||||
|
signer: *rc_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: xcmPallet
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: Superuser,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $force_create_asset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmPallet.Sent
|
||||||
|
- name: dmpQueue.ExecutedDownward
|
||||||
|
chain: *assets_parachain
|
||||||
|
attribute:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 2,000,000,000
|
||||||
|
- queries:
|
||||||
|
forced_created_asset:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: asset
|
||||||
|
args: [ *asset_id ]
|
||||||
|
- asserts:
|
||||||
|
isSome:
|
||||||
|
args: [ $forced_created_asset ]
|
||||||
|
|
||||||
|
- name: DEPENDANCY | Some Assets should be minted for the sender
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: assets
|
||||||
|
call: mint
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
*ap_wallet,
|
||||||
|
*amount
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: assets.Issued
|
||||||
|
its:
|
||||||
|
- name: Assets Parachain should be able to reserve transfer an Asset to Penpal Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: limitedReserveTransferAssets
|
||||||
|
args: [
|
||||||
|
*pp_dest, # destination
|
||||||
|
{ # beneficiary
|
||||||
|
V1: {
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X1: {
|
||||||
|
AccountId32: {
|
||||||
|
network: Any,
|
||||||
|
id: *pp_acc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ # assets
|
||||||
|
V1: [
|
||||||
|
{
|
||||||
|
id: {
|
||||||
|
Concrete: {
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X2: [
|
||||||
|
{
|
||||||
|
PalletInstance: 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
GeneralIndex: *asset_id
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fun: {
|
||||||
|
Fungible: *amount_to_send
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
0, # feeAssetItem
|
||||||
|
Unlimited # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: polkadotXcm.Attempted
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 1,000,000,000
|
||||||
|
- name: assets.Transferred
|
||||||
|
attributes:
|
||||||
|
type: AccountId32
|
||||||
|
value: *pp_sovereign_sibl
|
||||||
|
- name: assets.Transferred
|
||||||
|
attributes:
|
||||||
|
type: u128
|
||||||
|
value: *amount_to_send
|
||||||
|
|
||||||
|
- name: polkadotXcm.limitedReserveTransferAssets (KSM) | Assets Parachain -> Penpal Parachain
|
||||||
|
its:
|
||||||
|
- name: Assets Parachain should be able to reserve transfer KSM to Penpal Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *assets_parachain
|
||||||
|
signer: *ap_signer
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: limitedReserveTransferAssets
|
||||||
|
args: [
|
||||||
|
*pp_dest, # destination
|
||||||
|
{ # beneficiary
|
||||||
|
V1: {
|
||||||
|
parents: 0,
|
||||||
|
interior: {
|
||||||
|
X1: {
|
||||||
|
AccountId32: {
|
||||||
|
network: Any,
|
||||||
|
id: *pp_acc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ # assets
|
||||||
|
V1: [
|
||||||
|
*ap_ksm_fungible
|
||||||
|
]
|
||||||
|
},
|
||||||
|
0, # feeAssetItem
|
||||||
|
Unlimited # weightLimit
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: polkadotXcm.Attempted
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsOutcome
|
||||||
|
isComplete: true
|
||||||
|
value: 1,000,000,000
|
||||||
|
- name: balances.Endowed
|
||||||
|
attributes:
|
||||||
|
type: AccountId32
|
||||||
|
value: *pp_sovereign_sibl
|
||||||
|
- name: balances.Endowed
|
||||||
|
attributes:
|
||||||
|
type: u128
|
||||||
|
value: *amount
|
||||||
|
|
||||||
|
- name: polkadotXcm.send( system.remarkWithEvent() ) | Penpal Parachain -> Assets Parachain
|
||||||
|
before:
|
||||||
|
- name: Get the asset balance of the Penpal Parachain Sovereign account in Assets Parachain
|
||||||
|
actions:
|
||||||
|
- queries:
|
||||||
|
assets_balance_pp_sovereign_before:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: account
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
*pp_sovereign_sibl
|
||||||
|
]
|
||||||
|
its:
|
||||||
|
- name: Penpal Parachain should be able to send XCM message paying its fee with sufficient asset[2] in Assets Parachain
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest_routed, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*ap_suff_asset_fungible]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *ap_suff_asset_fungible,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: SovereignAccount,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $system_remark_with_event
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: sudo.Sudid
|
||||||
|
attribute:
|
||||||
|
type: Result<Null, SpRuntimeDispatchError>
|
||||||
|
value: Ok
|
||||||
|
- name: polkadotXcm.Sent
|
||||||
|
- name: assets.Burned
|
||||||
|
chain: *assets_parachain
|
||||||
|
attributes:
|
||||||
|
type: AccountId32
|
||||||
|
value: *pp_sovereign_sibl
|
||||||
|
- name: assets.Issued
|
||||||
|
chain: *assets_parachain
|
||||||
|
attributes:
|
||||||
|
type: u32
|
||||||
|
value: *asset_id
|
||||||
|
- name: system.Remarked
|
||||||
|
chain: *assets_parachain
|
||||||
|
attributes:
|
||||||
|
type: AccountId32
|
||||||
|
value: *pp_sovereign_sibl
|
||||||
|
- queries:
|
||||||
|
assets_balance_pp_sovereign_after:
|
||||||
|
chain: *assets_parachain
|
||||||
|
pallet: assets
|
||||||
|
call: account
|
||||||
|
args: [
|
||||||
|
*asset_id,
|
||||||
|
*pp_sovereign_sibl
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Should reduce the asset[2] balance of the Penpal Parachain's SovereignAccount in the Assets Parachain
|
||||||
|
actions:
|
||||||
|
- asserts:
|
||||||
|
assetsDecreased:
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
balances: {
|
||||||
|
before: $assets_balance_pp_sovereign_before,
|
||||||
|
after: $assets_balance_pp_sovereign_after,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
- name: Penpal Parachain SHOULD NOT be able to send XCM message paying its fee with sufficient asset[3] if not balance
|
||||||
|
actions:
|
||||||
|
- extrinsics:
|
||||||
|
- chain: *penpal_parachain
|
||||||
|
signer: *pp_signer
|
||||||
|
sudo: true
|
||||||
|
pallet: polkadotXcm
|
||||||
|
call: send
|
||||||
|
args: [
|
||||||
|
*ap_dest_routed, # destination
|
||||||
|
{
|
||||||
|
v2: [ #message
|
||||||
|
{
|
||||||
|
WithdrawAsset: [*ap_suff_asset_fungible_fail]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
BuyExecution: {
|
||||||
|
fees: *ap_suff_asset_fungible_fail,
|
||||||
|
weightLimit: Unlimited
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Transact: {
|
||||||
|
originType: SovereignAccount,
|
||||||
|
requireWeightAtMost: *weight_at_most,
|
||||||
|
call: $system_remark_with_event
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
events:
|
||||||
|
- name: xcmpQueue.Fail
|
||||||
|
chain: *assets_parachain
|
||||||
|
attributes:
|
||||||
|
type: XcmV2TraitsError
|
||||||
|
value: FailedToTransactAsset
|
||||||
Reference in New Issue
Block a user