difftreelog
test(xcm) manually initialize HRMP
in: master
5 files changed
.baedeker/xcm-opal.jsonnetdiffbeforeafterboth--- a/.baedeker/xcm-opal.jsonnet
+++ b/.baedeker/xcm-opal.jsonnet
@@ -11,8 +11,8 @@
spec: {Genesis:{
chain: relay_spec,
modify:: m.genericRelay($, hrmp = [
- [$.parachains.opal.paraId, $.parachains.westmint.paraId, 8, 512],
- [$.parachains.westmint.paraId, $.parachains.opal.paraId, 8, 512],
+ // [$.parachains.opal.paraId, $.parachains.westmint.paraId, 8, 512],
+ // [$.parachains.westmint.paraId, $.parachains.opal.paraId, 8, 512],
]),
}},
nodes: {
.baedeker/xcm-quartz.jsonnetdiffbeforeafterboth--- a/.baedeker/xcm-quartz.jsonnet
+++ b/.baedeker/xcm-quartz.jsonnet
@@ -11,13 +11,13 @@
spec: {Genesis:{
chain: relay_spec,
modify:: m.genericRelay($, hrmp = std.join([], [
- [[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],
- for [a, b] in [
- ['quartz', 'karura'],
- ['quartz', 'moonriver'],
- ['quartz', 'statemine'],
- ['quartz', 'shiden'],
- ]
+ // [[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],
+ // for [a, b] in [
+ // ['quartz', 'karura'],
+ // ['quartz', 'moonriver'],
+ // ['quartz', 'statemine'],
+ // ['quartz', 'shiden'],
+ // ]
])),
}},
nodes: {
.baedeker/xcm-unique.jsonnetdiffbeforeafterboth1local2m = import 'baedeker-library/mixin/spec.libsonnet',3;45function(relay_spec)67local relay = {8 name: 'relay',9 bin: 'bin/polkadot',10 validatorIdAssignment: 'staking',11 spec: {Genesis:{12 chain: relay_spec,13 modify:: m.genericRelay($, hrmp = std.join([], [14 [[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],15 for [a, b] in [16 ['unique', 'acala'],17 ['unique', 'moonbeam'],18 ['unique', 'statemint'],19 ['unique', 'astar'],20 ['unique', 'polkadex'],21 ]22 ])),23 }},24 nodes: {25 [name]: {26 bin: $.bin,27 wantedKeys: 'relay',28 },29 for name in ['alice', 'bob', 'charlie', 'dave', 'eve', 'ferdie', 'gregory']30 },31};3233local unique = {34 name: 'unique',35 bin: 'bin/unique',36 paraId: 1001,37 spec: {Genesis:{38 modify:: m.genericPara($),39 }},40 nodes: {41 [name]: {42 bin: $.bin,43 wantedKeys: 'para',44 },45 for name in ['alice', 'bob']46 },47};4849local acala = {50 name: 'acala',51 bin: 'bin/acala',52 paraId: 1002,53 spec: {Genesis:{54 chain: 'acala-dev',55 modify:: bdk.mixer([56 m.genericPara($),57 function(prev) prev {id+: '-local'},58 ]),59 }},60 nodes: {61 [name]: {62 bin: $.bin,63 wantedKeys: 'para',64 },65 for name in ['alice', 'bob']66 },67};6869local moonbeam = {70 name: 'moonbeam',71 bin: 'bin/moonbeam',72 signatureSchema: 'Ethereum',73 paraId: 1003,74 spec: {Genesis:{75 chain: 'moonbeam-local',76 specFilePrefix: 'moonbeam-local-',77 modify:: m.genericPara($),78 }},79 nodes: {80 [name]: {81 bin: $.bin,82 wantedKeys: 'para-nimbus',83 },84 for name in ['alith', 'baltathar']85 },86};8788local statemint = {89 name: 'statemint',90 bin: 'bin/cumulus',91 paraId: 1004,92 spec: {Genesis:{93 chain: 'statemint-local',94 modify:: m.genericPara($),95 }},96 nodes: {97 [name]: {98 bin: $.bin,99 wantedKeys: 'para-ed',100 },101 for name in ['alice', 'bob']102 },103};104105local astar = {106 name: 'astar',107 bin: 'bin/astar',108 paraId: 1005,109 spec: {Genesis:{110 chain: 'astar-dev',111 modify:: m.genericPara($),112 }},113 nodes: {114 [name]: {115 bin: $.bin,116 wantedKeys: 'para',117 },118 for name in ['alice', 'bob']119 },120};121122local polkadex = {123 name: 'polkadex',124 bin: 'bin/polkadex',125 paraId: 1006,126 spec: {Genesis:{127 chain: 'mainnet',128 modify:: m.genericPara($),129 }},130 nodes: {131 [name]: {132 bin: $.bin,133 wantedKeys: 'para',134 },135 for name in ['alice', 'bob']136 },137};138139relay + {140 parachains: {141 [para.name]: para,142 for para in [unique, acala, moonbeam, statemint, astar, polkadex]143 },144}1local2m = import 'baedeker-library/mixin/spec.libsonnet',3;45function(relay_spec)67local relay = {8 name: 'relay',9 bin: 'bin/polkadot',10 validatorIdAssignment: 'staking',11 spec: {Genesis:{12 chain: relay_spec,13 modify:: m.genericRelay($, hrmp = std.join([], [14 [[$.parachains[a].paraId, $.parachains[b].paraId, 8, 512], [$.parachains[b].paraId, $.parachains[a].paraId, 8, 512]],15 for [a, b] in [16 // ['unique', 'acala'],17 // ['unique', 'moonbeam'],18 // ['unique', 'statemint'],19 // ['unique', 'astar'],20 // ['unique', 'polkadex'],21 ]22 ])),23 }},24 nodes: {25 [name]: {26 bin: $.bin,27 wantedKeys: 'relay',28 },29 for name in ['alice', 'bob', 'charlie', 'dave', 'eve', 'ferdie', 'gregory']30 },31};3233local unique = {34 name: 'unique',35 bin: 'bin/unique',36 paraId: 1001,37 spec: {Genesis:{38 modify:: m.genericPara($),39 }},40 nodes: {41 [name]: {42 bin: $.bin,43 wantedKeys: 'para',44 },45 for name in ['alice', 'bob']46 },47};4849local acala = {50 name: 'acala',51 bin: 'bin/acala',52 paraId: 1002,53 spec: {Genesis:{54 chain: 'acala-dev',55 modify:: bdk.mixer([56 m.genericPara($),57 function(prev) prev {id+: '-local'},58 ]),59 }},60 nodes: {61 [name]: {62 bin: $.bin,63 wantedKeys: 'para',64 },65 for name in ['alice', 'bob']66 },67};6869local moonbeam = {70 name: 'moonbeam',71 bin: 'bin/moonbeam',72 signatureSchema: 'Ethereum',73 paraId: 1003,74 spec: {Genesis:{75 chain: 'moonbeam-local',76 specFilePrefix: 'moonbeam-local-',77 modify:: m.genericPara($),78 }},79 nodes: {80 [name]: {81 bin: $.bin,82 wantedKeys: 'para-nimbus',83 },84 for name in ['alith', 'baltathar']85 },86};8788local statemint = {89 name: 'statemint',90 bin: 'bin/cumulus',91 paraId: 1004,92 spec: {Genesis:{93 chain: 'statemint-local',94 modify:: m.genericPara($),95 }},96 nodes: {97 [name]: {98 bin: $.bin,99 wantedKeys: 'para-ed',100 },101 for name in ['alice', 'bob']102 },103};104105local astar = {106 name: 'astar',107 bin: 'bin/astar',108 paraId: 1005,109 spec: {Genesis:{110 chain: 'astar-dev',111 modify:: m.genericPara($),112 }},113 nodes: {114 [name]: {115 bin: $.bin,116 wantedKeys: 'para',117 },118 for name in ['alice', 'bob']119 },120};121122local polkadex = {123 name: 'polkadex',124 bin: 'bin/polkadex',125 paraId: 1006,126 spec: {Genesis:{127 chain: 'mainnet',128 modify:: m.genericPara($),129 }},130 nodes: {131 [name]: {132 bin: $.bin,133 wantedKeys: 'para',134 },135 for name in ['alice', 'bob']136 },137};138139relay + {140 parachains: {141 [para.name]: para,142 for para in [unique, acala, moonbeam, statemint, astar, polkadex]143 },144}.github/workflows/xcm.ymldiffbeforeafterboth--- a/.github/workflows/xcm.yml
+++ b/.github/workflows/xcm.yml
@@ -326,11 +326,20 @@
path: ${{ steps.bdk.outputs.composeProject }}
retention-days: 2
- - name: Run XCM tests
+ - name: Yarn install
working-directory: tests
run: |
yarn install
yarn add mochawesome
+
+ - name: Call HRMP initialization
+ working-directory: tests
+ run: |
+ yarn ts-node --esm src/util/createHrmp.ts ${{matrix.network}}
+
+ - name: Run XCM tests
+ working-directory: tests
+ run: |
# Wanted by both wait_for_first_block
export RPC_URL="${RELAY_OPAL_HTTP_URL:-${RELAY_QUARTZ_HTTP_URL:-${RELAY_UNIQUE_HTTP_URL:-}}}"
./scripts/wait_for_first_block.sh
tests/src/util/createHrmp.tsdiffbeforeafterboth--- /dev/null
+++ b/tests/src/util/createHrmp.ts
@@ -0,0 +1,30 @@
+import {usingPlaygrounds} from '.';
+import config from '../config';
+
+const profile = process.argv[2];
+if(!profile) throw new Error('missing profile/relay argument');
+
+await usingPlaygrounds(async (helper, privateKey) => {
+ const bidirOpen = async (a: number, b: number) => {
+ console.log(`Opening ${a} <=> ${b}`);
+ await helper.getSudo().executeExtrinsic(alice, 'api.tx.hrmp.forceOpenHrmpChannel', [a, b, 8, 512]);
+ await helper.getSudo().executeExtrinsic(alice, 'api.tx.hrmp.forceOpenHrmpChannel', [b, a, 8, 512]);
+ };
+ const alice = await privateKey('//Alice');
+ switch (profile) {
+ case 'opal':
+ await bidirOpen(1001, 1002);
+ break;
+ case 'quartz':
+ case 'unique':
+ await bidirOpen(1001, 1002);
+ await bidirOpen(1001, 1003);
+ await bidirOpen(1001, 1004);
+ await bidirOpen(1001, 1005);
+ break;
+ default:
+ throw new Error(`unknown hrmp config profile: ${profile}`);
+ }
+}, config.relayUrl);
+// We miss disconnect/unref somewhere.
+process.exit(0);