mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 17:31:03 +00:00
[Feature] XCM-Emulator (#2447)
* [Feature] XCM-Emulator * ".git/.scripts/commands/fmt/fmt.sh" * rename * readme * more rename * rename directory * implement AssetTransactor * Update xcm/xcm-emulator/README.md Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * address review comments (#2502) * Update xcm/xcm-emulator/example/src/lib.rs Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * Update xcm/xcm-emulator/README.md * Use 2d weights. * Point out nearer the failure why it should fail * Move test-runtime to under examples * Walk through how to use it * proof needs to be non-zero * Apply suggestions from code review * Update xcm/xcm-emulator/README.md Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * Improve xcm emulator (#2593) * folder restructutre * common created * make macros repetitions * messenger traits for relay and para * default Messenger impls * messenger traits refactor * declared two networks * init network approach works * queues use HashMap but relay block number * init and reset refactor * messengers trait name changed * relay block number suboptimal * fix reset hashmap keys * genesis added * test ext added for parachains * genesis added relay chains * genesis to storage * new_ext replaced by on_init * new relay block number approach * ext_wrapper added * added types to Parachain trait * relay chain with types * restructure * para_ids working * replace para_id getter * replace para_id getter 2 * tests restructure + common variables * added sovereign and balances helpers * more helpers + tess pass * expected events macro added * added events trait method * expect_events macro improve * expect_events macro done * network traits added * reserve_transfer test added * para & relay macro inputs redefined * added collectives & BH paras * test restructure * statemine removed * nitpick * rename test folder + events logs * clean * weight threshold helper * update readme * remove cumulus-test-service dependancy * fmt * comment docs * update e2e tests to xcm v3 * clippy + runtime-benchmark + clean docs --------- Co-authored-by: command-bot <> Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> Co-authored-by: Squirrel <gilescope@gmail.com> Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Co-authored-by: Ignacio Palacios <ignacio.palacios.santos@gmail.com>
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
||||
---
|
||||
settings:
|
||||
chains:
|
||||
relay_chain: &relay_chain
|
||||
wsPort: 9700
|
||||
collectives_parachain: &collectives_parachain
|
||||
wsPort: 9710
|
||||
paraId: &cp_id 1001
|
||||
variables:
|
||||
xcm_version: &xcm_version '3'
|
||||
chains:
|
||||
accounts:
|
||||
alice_signer: &alice_signer //Alice
|
||||
decodedCalls:
|
||||
ap_force_xcm_version:
|
||||
chain: *collectives_parachain
|
||||
pallet: polkadotXcm
|
||||
call: forceXcmVersion
|
||||
args: [
|
||||
{ # location
|
||||
parents: 1,
|
||||
interior: Here
|
||||
},
|
||||
*xcm_version
|
||||
]
|
||||
|
||||
tests:
|
||||
- name: Initialize Chains
|
||||
its:
|
||||
- name: XCM supported versions between chains
|
||||
actions:
|
||||
- extrinsics: # Relay Chain sets supported version for Collectives Parachain
|
||||
- chain: *relay_chain
|
||||
sudo: true
|
||||
signer: *alice_signer
|
||||
pallet: xcmPallet
|
||||
call: forceXcmVersion
|
||||
args: [
|
||||
{ # location
|
||||
parents: 0,
|
||||
interior: {
|
||||
X1: {
|
||||
Parachain: *cp_id
|
||||
}
|
||||
}
|
||||
},
|
||||
*xcm_version
|
||||
]
|
||||
events:
|
||||
- name: sudo.Sudid
|
||||
attributes:
|
||||
- type: Result<Null, SpRuntimeDispatchError>
|
||||
value: Ok
|
||||
- name: xcmPallet.SupportedVersionChanged
|
||||
attributes:
|
||||
- type: u32
|
||||
value: *xcm_version
|
||||
- extrinsics: # Collectives Parachain sets supported version for Relay Chain through it
|
||||
- chain: *relay_chain
|
||||
signer: *alice_signer
|
||||
sudo: true
|
||||
pallet: xcmPallet
|
||||
call: send
|
||||
args: [
|
||||
{ v3: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination
|
||||
{
|
||||
v3: [ # message
|
||||
{
|
||||
UnpaidExecution: {
|
||||
weightLimit: {
|
||||
limited: {
|
||||
refTime: 2200000000, # 2_200_000_000
|
||||
proofSize: 200000, # 200_000
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
Transact: {
|
||||
originKind: Superuser,
|
||||
requireWeightAtMost: {
|
||||
refTime: 200000000, # 200_000_000
|
||||
proofSize: 0,
|
||||
},
|
||||
call: $ap_force_xcm_version
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
events:
|
||||
- name: sudo.Sudid
|
||||
attributes:
|
||||
- type: Result<Null, SpRuntimeDispatchError>
|
||||
value: Ok
|
||||
- name: xcmPallet.Sent
|
||||
- name: polkadotXcm.SupportedVersionChanged
|
||||
chain: *collectives_parachain
|
||||
attributes:
|
||||
- type: u32
|
||||
value: *xcm_version
|
||||
- name: dmpQueue.ExecutedDownward
|
||||
chain: *collectives_parachain
|
||||
attributes:
|
||||
- type: XcmV3TraitsOutcome
|
||||
xcmOutcome: Complete
|
||||
+180
@@ -0,0 +1,180 @@
|
||||
---
|
||||
settings:
|
||||
chains:
|
||||
relay_chain: &relay_chain
|
||||
wsPort: 9700
|
||||
collectives_parachain: &collectives_parachain
|
||||
wsPort: 9710
|
||||
paraId: &cp_id 1001
|
||||
variables:
|
||||
accounts:
|
||||
alice_signer: &acc_alice_signer //Alice
|
||||
alice_account32: &acc_alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||
alice_ss58: &acc_alice_ss58 '15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5'
|
||||
|
||||
tests:
|
||||
- name: Teleport assets from Relay Chain to Collectives Parachain successful.
|
||||
before:
|
||||
- name: Get the Alice balances on Relay & Collectives Chains.
|
||||
actions:
|
||||
- queries:
|
||||
balance_rc_alice_1:
|
||||
chain: *relay_chain
|
||||
pallet: system
|
||||
call: account
|
||||
args: [ *acc_alice_acc32 ]
|
||||
balance_cp_alice_1:
|
||||
chain: *collectives_parachain
|
||||
pallet: system
|
||||
call: account
|
||||
args: [ *acc_alice_acc32 ]
|
||||
its:
|
||||
- name: Teleport assets from Relay Chain to Collectives Parachain
|
||||
actions:
|
||||
- extrinsics:
|
||||
- chain: *relay_chain
|
||||
signer: *acc_alice_signer
|
||||
pallet: xcmPallet
|
||||
call: teleportAssets
|
||||
args: [
|
||||
{ v3: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination
|
||||
{ v3: { parents: 0, interior: { x1: { accountId32: { id: *acc_alice_acc32 }}}}}, # beneficiary
|
||||
{
|
||||
v3: [
|
||||
# {
|
||||
# # TODO use a separate Assets to pay a fee, to receive an exact amount of assets on beneficiary account.
|
||||
# # a call with two assets fails with an error right now.
|
||||
# id: { concrete: { 0, interior: { here: true }}},
|
||||
# fun: { fungible: 1000000000000 } # 1_000_000_000_000
|
||||
# },
|
||||
{
|
||||
id: { concrete: { 0, interior: { here: true }}},
|
||||
fun: { fungible: 20000000000000 } # 20_000_000_000_000
|
||||
}
|
||||
]
|
||||
}, # assets
|
||||
0, # feeAssetItem
|
||||
]
|
||||
events:
|
||||
- name: xcmPallet.Attempted
|
||||
chain: *relay_chain
|
||||
attributes:
|
||||
- type: XcmV3TraitsOutcome
|
||||
xcmOutcome: Complete
|
||||
- name: dmpQueue.ExecutedDownward
|
||||
chain: *collectives_parachain
|
||||
attributes:
|
||||
- type: XcmV3TraitsOutcome
|
||||
xcmOutcome: Complete
|
||||
- queries:
|
||||
balance_rc_alice_2:
|
||||
chain: *relay_chain
|
||||
pallet: system
|
||||
call: account
|
||||
args: [ *acc_alice_acc32 ]
|
||||
balance_cp_alice_2:
|
||||
chain: *collectives_parachain
|
||||
pallet: system
|
||||
call: account
|
||||
args: [ *acc_alice_acc32 ]
|
||||
- name: Alice deposit check, balance decreased on Relay Chain, increased on Collectives.
|
||||
actions:
|
||||
- asserts:
|
||||
balanceDecreased:
|
||||
args: [
|
||||
{
|
||||
balances: {
|
||||
before: $balance_rc_alice_1,
|
||||
after: $balance_rc_alice_2,
|
||||
}
|
||||
}
|
||||
]
|
||||
balanceIncreased:
|
||||
args: [
|
||||
{
|
||||
balances: {
|
||||
before: $balance_cp_alice_1,
|
||||
after: $balance_cp_alice_2,
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
- name: Teleport assets from Collectives Parachain to Relay Chain successful
|
||||
actions:
|
||||
- extrinsics:
|
||||
- chain: *collectives_parachain
|
||||
signer: *acc_alice_signer
|
||||
pallet: polkadotXcm
|
||||
call: teleportAssets
|
||||
args: [
|
||||
{ v3: { parents: 1, interior: { here: true }}}, # destination
|
||||
{ v3: { parents: 0, interior: { x1: { accountId32: { id: *acc_alice_acc32 }}}}}, # beneficiary
|
||||
{
|
||||
v3: [
|
||||
{
|
||||
id: { concrete: { parents: 1, interior: { here: true }}},
|
||||
fun: { fungible: 10000000000000 } # 10_000_000_000_000
|
||||
}
|
||||
]
|
||||
}, # assets
|
||||
0, # feeAssetItem
|
||||
]
|
||||
events:
|
||||
- name: balances.Withdraw
|
||||
attributes:
|
||||
- type: AccountId32
|
||||
key: who
|
||||
value: *acc_alice_ss58
|
||||
- type: u128
|
||||
key: amount
|
||||
value: 10000000000000
|
||||
- name: polkadotXcm.Attempted
|
||||
attributes:
|
||||
- type: XcmV3TraitsOutcome
|
||||
xcmOutcome: Complete
|
||||
- name: balances.Withdraw
|
||||
chain: *relay_chain
|
||||
attributes:
|
||||
- type: u128
|
||||
key: amount
|
||||
value: 10000000000000 # amount received and withdrawn from registry account
|
||||
- name: ump.ExecutedUpward
|
||||
chain: *relay_chain
|
||||
attributes:
|
||||
- type: XcmV3TraitsOutcome
|
||||
xcmOutcome: Complete
|
||||
- queries:
|
||||
balance_rc_alice_3:
|
||||
chain: *relay_chain
|
||||
pallet: system
|
||||
call: account
|
||||
args: [ *acc_alice_acc32 ]
|
||||
balance_cp_alice_3:
|
||||
chain: *collectives_parachain
|
||||
pallet: system
|
||||
call: account
|
||||
args: [ *acc_alice_acc32 ]
|
||||
|
||||
- name: Alice deposit check, balance decreased on Collectives, increased on Relay Chain.
|
||||
actions:
|
||||
- asserts:
|
||||
balanceDecreased:
|
||||
args: [
|
||||
{
|
||||
balances: {
|
||||
before: $balance_cp_alice_2,
|
||||
after: $balance_cp_alice_3,
|
||||
}
|
||||
}
|
||||
]
|
||||
balanceIncreased:
|
||||
args: [
|
||||
{
|
||||
balances: {
|
||||
before: $balance_rc_alice_2,
|
||||
after: $balance_rc_alice_3,
|
||||
}
|
||||
}
|
||||
]
|
||||
# TODO (P2) assert Alice balance before and after teleport (see example in kick_member test)
|
||||
# TODO (P1) test: teleport of non relay chain assets fails
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
---
|
||||
settings:
|
||||
chains:
|
||||
relay_chain: &relay_chain
|
||||
wsPort: 9700
|
||||
collectives_parachain: &collectives_parachain
|
||||
wsPort: 9710
|
||||
paraId: &cp_id 1001
|
||||
variables:
|
||||
chains:
|
||||
accounts:
|
||||
alice_signer: &alice_signer //Alice
|
||||
alice_account32: &alice_acc32 '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'
|
||||
alice_ss58: &acc_alice_ss58 '15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5'
|
||||
|
||||
tests:
|
||||
- name: Reserve assets from Relay Chain to Collectives Parachain fails
|
||||
its:
|
||||
- name: Reserve assets from Relay Chain to Collectives Parachain
|
||||
actions:
|
||||
- extrinsics:
|
||||
- chain: *relay_chain
|
||||
signer: *alice_signer
|
||||
pallet: xcmPallet
|
||||
call: reserveTransferAssets
|
||||
args: [
|
||||
{ v3: { 0, interior: { x1: { parachain: *cp_id }}}}, # destination
|
||||
{ v3: { parents: 0, interior: { x1: { accountId32: { id: *alice_acc32 }}}}}, # beneficiary
|
||||
{
|
||||
v3: [
|
||||
{
|
||||
id: { concrete: { 0, interior: { here: true }}},
|
||||
fun: { fungible: 20000000000000 } # 20_000_000_000_000
|
||||
}
|
||||
]
|
||||
}, # assets
|
||||
0, # feeAssetItem
|
||||
]
|
||||
events:
|
||||
- name: xcmPallet.Attempted
|
||||
chain: *relay_chain
|
||||
attributes:
|
||||
- type: XcmV3TraitsOutcome
|
||||
xcmOutcome: Complete
|
||||
- name: dmpQueue.ExecutedDownward
|
||||
chain: *collectives_parachain
|
||||
attributes:
|
||||
- type: XcmV3TraitsOutcome
|
||||
xcmOutcome: Incomplete
|
||||
Reference in New Issue
Block a user