git.delta.rocks / unique-network / refs/commits / 8f513946a618

difftreelog

Merge pull request #905 from UniqueNetwork/feature/astar-barrier

Yaroslav Bolyukin2023-03-30parents: #396344d #de88466.patch.diff
in: master
Configure astar barrier

21 files changed

modified.docker/Dockerfile-acala.j2diffbeforeafterboth
3838
39FROM ubuntu:22.04 as builder-acala39FROM ubuntu:22.04 as builder-acala
4040
41COPY --from=builder-acala-bin /unique_parachain/Acala/target/production/acala /unique_parachain/Acala/target/production/acala41COPY --from=builder-acala-bin /unique_parachain/Acala/target/production/acala /unique_parachain/acala/target/production/acala
4242
added.docker/Dockerfile-astar.j2diffbeforeafterboth

no changes

modified.docker/Dockerfile-xcm.j2diffbeforeafterboth
2323
24COPY ./xcm-config/launch-config-xcm-{{ NETWORK }}.json ./launch-config-xcm-{{ NETWORK }}.json24COPY ./xcm-config/launch-config-xcm-{{ NETWORK }}.json ./launch-config-xcm-{{ NETWORK }}.json
25COPY ./xcm-config/5validators.jsonnet ./5validators.jsonnet25COPY ./xcm-config/5validators.jsonnet ./5validators.jsonnet
26COPY ./xcm-config/6validators.jsonnet ./6validators.jsonnet
2627
27RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \28RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \
28 cd unique-chain && \29 cd unique-chain && \
5051
51COPY --from=builder-unique /unique_parachain/launch-config-xcm-{{ NETWORK }}.json /polkadot-launch/52COPY --from=builder-unique /unique_parachain/launch-config-xcm-{{ NETWORK }}.json /polkadot-launch/
52COPY --from=builder-unique /unique_parachain/5validators.jsonnet /polkadot-launch/5validators.jsonnet53COPY --from=builder-unique /unique_parachain/5validators.jsonnet /polkadot-launch/5validators.jsonnet
54COPY --from=builder-unique /unique_parachain/6validators.jsonnet /polkadot-launch/6validators.jsonnet
5355
54COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique-collator /unique-chain/target/release/56COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique-collator /unique-chain/target/release/
5557
56COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/58COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/
57COPY --from=uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/59COPY --from=uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/
58COPY --from=uniquenetwork/builder-cumulus:{{ CUMULUS_BUILD_BRANCH }} /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus60COPY --from=uniquenetwork/builder-cumulus:{{ CUMULUS_BUILD_BRANCH }} /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus
59COPY --from=uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} /unique_parachain/Acala/target/production/acala /acala/target/release/61COPY --from=uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} /unique_parachain/Acala/target/production/acala /acala/target/release/
62COPY --from=uniquenetwork/builder-astar:{{ ASTAR_BUILD_BRANCH }} /unique_parachain/astar/target/release/astar /astar/target/release/
60COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/63COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/
6164
62EXPOSE 984465EXPOSE 9844
65EXPOSE 994668EXPOSE 9946
66EXPOSE 994769EXPOSE 9947
67EXPOSE 994870EXPOSE 9948
71EXPOSE 9949
6872
69CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \73CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \
70 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \74 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
modified.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.tempdiffbeforeafterboth
2FROM uniquenetwork/builder-moonbeam:{{ MOONRIVER_BUILD_BRANCH }} as moonbeam2FROM uniquenetwork/builder-moonbeam:{{ MOONRIVER_BUILD_BRANCH }} as moonbeam
3FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus3FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus
4FROM uniquenetwork/builder-acala:{{ KARURA_BUILD_BRANCH }} as acala4FROM uniquenetwork/builder-acala:{{ KARURA_BUILD_BRANCH }} as acala
5FROM uniquenetwork/builder-astar:{{ SHIDEN_BUILD_BRANCH }} as astar
56
6# ===== Rust builder =====7# ===== Rust builder =====
7FROM ubuntu:22.04 as rust-builder8FROM ubuntu:22.04 as rust-builder
62 yarn install63 yarn install
6364
64COPY --from=builder-unique /unique_parachain/.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.json /polkadot-launch/launch-config.json65COPY --from=builder-unique /unique_parachain/.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.json /polkadot-launch/launch-config.json
65COPY --from=builder-unique /unique_parachain/.docker/xcm-config/5validators.jsonnet /polkadot-launch/5validators.jsonnet66COPY --from=builder-unique /unique_parachain/.docker/xcm-config/6validators.jsonnet /polkadot-launch/6validators.jsonnet
6667
67COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/68COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/
68COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/69COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/
69COPY --from=moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/70COPY --from=moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/
70COPY --from=cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus71COPY --from=cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus
71COPY --from=acala /unique_parachain/Acala/target/production/acala /acala/target/release/72COPY --from=acala /unique_parachain/Acala/target/production/acala /acala/target/release/
73COPY --from=astar /unique_parachain/astar/target/release/astar /astar/target/release/
72COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/74COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/
7375
74EXPOSE 984476EXPOSE 9844
75EXPOSE 994477EXPOSE 9944
76EXPOSE 994678EXPOSE 9946
77EXPOSE 994779EXPOSE 9947
78EXPOSE 994880EXPOSE 9948
81EXPOSE 9949
7982
80CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \83CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \
81 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \84 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
modified.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.tempdiffbeforeafterboth
2FROM uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} as moonbeam2FROM uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} as moonbeam
3FROM uniquenetwork/builder-cumulus:{{ STATEMINT_BUILD_BRANCH }} as cumulus3FROM uniquenetwork/builder-cumulus:{{ STATEMINT_BUILD_BRANCH }} as cumulus
4FROM uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} as acala4FROM uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} as acala
5FROM uniquenetwork/builder-astar:{{ ASTAR_BUILD_BRANCH }} as astar
56
6# ===== Rust builder =====7# ===== Rust builder =====
7FROM ubuntu:22.04 as rust-builder8FROM ubuntu:22.04 as rust-builder
62 yarn install63 yarn install
6364
64COPY --from=builder-unique /unique_parachain/.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.json /polkadot-launch/launch-config.json65COPY --from=builder-unique /unique_parachain/.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.json /polkadot-launch/launch-config.json
65COPY --from=builder-unique /unique_parachain/.docker/xcm-config/5validators.jsonnet /polkadot-launch/5validators.jsonnet66COPY --from=builder-unique /unique_parachain/.docker/xcm-config/6validators.jsonnet /polkadot-launch/6validators.jsonnet
6667
67COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/68COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/
68COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/69COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/
69COPY --from=moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/70COPY --from=moonbeam /unique_parachain/moonbeam/target/release/moonbeam /moonbeam/target/release/
70COPY --from=cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus71COPY --from=cumulus /unique_parachain/cumulus/target/release/polkadot-parachain /cumulus/target/release/cumulus
71COPY --from=acala /unique_parachain/Acala/target/production/acala /acala/target/release/72COPY --from=acala /unique_parachain/Acala/target/production/acala /acala/target/release/
73COPY --from=astar /unique_parachain/astar/target/release/astar /astar/target/release/
72COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/74COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/
7375
74EXPOSE 984476EXPOSE 9844
75EXPOSE 994477EXPOSE 9944
76EXPOSE 994678EXPOSE 9946
77EXPOSE 994779EXPOSE 9947
78EXPOSE 994880EXPOSE 9948
81EXPOSE 9949
7982
80CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \83CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" && \
81 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \84 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
modified.docker/additional/xcm-rococo/docker-compose-xcm-quartz-rococo.ymldiffbeforeafterboth
13 - 994613 - 9946
14 - 994714 - 9947
15 - 994815 - 9948
16 - 9949
16 ports:17 ports:
17 - 127.0.0.1:9844:984418 - 127.0.0.1:9844:9844
18 - 127.0.0.1:9944:994419 - 127.0.0.1:9944:9944
19 - 127.0.0.1:9946:994620 - 127.0.0.1:9946:9946
20 - 127.0.0.1:9947:994721 - 127.0.0.1:9947:9947
21 - 127.0.0.1:9948:994822 - 127.0.0.1:9948:9948
23 - 127.0.0.1:9949:9949
2224
2325
modified.docker/additional/xcm-rococo/docker-compose-xcm-unique-rococo.ymldiffbeforeafterboth
13 - 994613 - 9946
14 - 994714 - 9947
15 - 994815 - 9948
16 - 9949
16 ports:17 ports:
17 - 127.0.0.1:9844:984418 - 127.0.0.1:9844:9844
18 - 127.0.0.1:9944:994419 - 127.0.0.1:9944:9944
19 - 127.0.0.1:9946:994620 - 127.0.0.1:9946:9946
20 - 127.0.0.1:9947:994721 - 127.0.0.1:9947:9947
21 - 127.0.0.1:9948:994822 - 127.0.0.1:9948:9948
23 - 127.0.0.1:9949:9949
2224
2325
modified.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.jsondiffbeforeafterboth
5 "chainInitializer": [5 "chainInitializer": [
6 "chainql",6 "chainql",
7 "--tla-code=spec=import '${spec}'",7 "--tla-code=spec=import '${spec}'",
8 "5validators.jsonnet"8 "6validators.jsonnet"
9 ], 9 ],
10 "nodes": [10 "nodes": [
11 {11 {
62 "--unsafe-ws-external",62 "--unsafe-ws-external",
63 "-lparachain::candidate_validation=debug"63 "-lparachain::candidate_validation=debug"
64 ]64 ]
65 }65 },
6666 {
67 "name": "ferdie",
68 "wsPort": 9899,
69 "rpcPort": 9898,
70 "port": 30999,
71 "flags": [
72 "--unsafe-rpc-external",
73 "--unsafe-ws-external",
74 "-lparachain::candidate_validation=debug"
75 ]
76 }
67 ],77 ],
68 "genesis": {78 "genesis": {
69 "runtime": {79 "runtime": {
155 ]165 ]
156 }166 }
157 ]167 ]
158 }168 },
169 {
170 "bin": "/astar/target/release/astar",
171 "id": "2007",
172 "chain": "shiden-dev",
173 "balance": "1000000000000000000000000",
174 "nodes": [
175 {
176 "wsPort": 9949,
177 "port": 31205,
178 "name": "alice",
179 "flags": [
180 "--unsafe-rpc-external",
181 "--unsafe-ws-external"
182 ]
183 }
184 ]
185 }
159 ],186 ],
160 "simpleParachains": [],187 "simpleParachains": [],
161 "hrmpChannels": [188 "hrmpChannels": [
194 "recipient": 2095,221 "recipient": 2095,
195 "maxCapacity": 8,222 "maxCapacity": 8,
196 "maxMessageSize": 512223 "maxMessageSize": 512
197 }224 },
225 {
226 "sender": 2007,
227 "recipient": 2095,
228 "maxCapacity": 8,
229 "maxMessageSize": 512
230 },
231 {
232 "sender": 2095,
233 "recipient": 2007,
234 "maxCapacity": 8,
235 "maxMessageSize": 512
236 }
198 ],237 ],
199 "finalization": false238 "finalization": false
200}239}
modified.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.jsondiffbeforeafterboth
5 "chainInitializer": [5 "chainInitializer": [
6 "chainql",6 "chainql",
7 "--tla-code=spec=import '${spec}'",7 "--tla-code=spec=import '${spec}'",
8 "5validators.jsonnet"8 "6validators.jsonnet"
9 ], 9 ],
10 "nodes": [10 "nodes": [
11 {11 {
62 "--unsafe-ws-external",62 "--unsafe-ws-external",
63 "-lparachain::candidate_validation=debug"63 "-lparachain::candidate_validation=debug"
64 ]64 ]
65 }65 },
6666 {
67 "name": "ferdie",
68 "wsPort": 9899,
69 "rpcPort": 9898,
70 "port": 30999,
71 "flags": [
72 "--unsafe-rpc-external",
73 "--unsafe-ws-external",
74 "-lparachain::candidate_validation=debug"
75 ]
76 }
67 ],77 ],
68 "genesis": {78 "genesis": {
69 "runtime": {79 "runtime": {
155 ]165 ]
156 }166 }
157 ]167 ]
158 }168 },
169 {
170 "bin": "/astar/target/release/astar",
171 "id": "2006",
172 "chain": "astar-dev",
173 "balance": "1000000000000000000000000",
174 "nodes": [
175 {
176 "wsPort": 9949,
177 "port": 31205,
178 "name": "alice",
179 "flags": [
180 "--unsafe-rpc-external",
181 "--unsafe-ws-external"
182 ]
183 }
184 ]
185 }
159 ],186 ],
160 "simpleParachains": [],187 "simpleParachains": [],
161 "hrmpChannels": [188 "hrmpChannels": [
194 "recipient": 2037,221 "recipient": 2037,
195 "maxCapacity": 8,222 "maxCapacity": 8,
196 "maxMessageSize": 512223 "maxMessageSize": 512
197 }224 },
225 {
226 "sender": 2006,
227 "recipient": 2037,
228 "maxCapacity": 8,
229 "maxMessageSize": 512
230 },
231 {
232 "sender": 2037,
233 "recipient": 2006,
234 "maxCapacity": 8,
235 "maxMessageSize": 512
236 }
198 ],237 ],
199 "finalization": false238 "finalization": false
200}239}
modified.docker/docker-compose.tmp-xcm-tests.j2diffbeforeafterboth
11 - 994611 - 9946
12 - 994712 - 9947
13 - 994813 - 9948
14 - 9949
14 ports:15 ports:
15 - 127.0.0.1:9844:984416 - 127.0.0.1:9844:9844
16 - 127.0.0.1:9933:9933 17 - 127.0.0.1:9933:9933
17 - 127.0.0.1:9944:994418 - 127.0.0.1:9944:9944
18 - 127.0.0.1:9946:994619 - 127.0.0.1:9946:9946
19 - 127.0.0.1:9947:994720 - 127.0.0.1:9947:9947
20 - 127.0.0.1:9948:994821 - 127.0.0.1:9948:9948
22 - 127.0.0.1:9949:9949
21 logging:23 logging:
22 options:24 options:
23 max-size: "1m"25 max-size: "1m"
added.docker/xcm-config/6validators.jsonnetdiffbeforeafterboth

no changes

modified.docker/xcm-config/launch-config-xcm-quartz.j2diffbeforeafterboth
5 "chainInitializer": [5 "chainInitializer": [
6 "chainql",6 "chainql",
7 "--tla-code=spec=import '${spec}'",7 "--tla-code=spec=import '${spec}'",
8 "5validators.jsonnet"8 "6validators.jsonnet"
9 ], 9 ],
10 "nodes": [10 "nodes": [
11 {11 {
62 "--unsafe-ws-external",62 "--unsafe-ws-external",
63 "-lparachain::candidate_validation=debug"63 "-lparachain::candidate_validation=debug"
64 ]64 ]
65 },
66 {
67 "name": "ferdie",
68 "wsPort": 9899,
69 "rpcPort": 9898,
70 "port": 30999,
71 "flags": [
72 "--unsafe-rpc-external",
73 "--unsafe-ws-external",
74 "-lparachain::candidate_validation=debug"
75 ]
65 }76 }
66
67 ],77 ],
68 "genesis": {78 "genesis": {
69 "runtime": {79 "runtime": {
155 ]165 ]
156 }166 }
157 ]167 ]
168 },
169 {
170 "bin": "/astar/target/release/astar",
171 "id": "2007",
172 "chain": "shiden-dev",
173 "balance": "1000000000000000000000000",
174 "nodes": [
175 {
176 "wsPort": 9949,
177 "port": 31205,
178 "name": "alice",
179 "flags": [
180 "--unsafe-rpc-external",
181 "--unsafe-ws-external"
182 ]
183 }
184 ]
158 }185 }
159 ],186 ],
160 "simpleParachains": [],187 "simpleParachains": [],
194 "recipient": 2095,221 "recipient": 2095,
195 "maxCapacity": 8,222 "maxCapacity": 8,
196 "maxMessageSize": 512223 "maxMessageSize": 512
197 }224 },
225 {
226 "sender": 2007,
227 "recipient": 2095,
228 "maxCapacity": 8,
229 "maxMessageSize": 512
230 },
231 {
232 "sender": 2095,
233 "recipient": 2007,
234 "maxCapacity": 8,
235 "maxMessageSize": 512
236 }
198 ],237 ],
199 "finalization": false238 "finalization": false
200}239}
modified.docker/xcm-config/launch-config-xcm-unique.j2diffbeforeafterboth
5 "chainInitializer": [5 "chainInitializer": [
6 "chainql",6 "chainql",
7 "--tla-code=spec=import '${spec}'",7 "--tla-code=spec=import '${spec}'",
8 "5validators.jsonnet"8 "6validators.jsonnet"
9 ], 9 ],
10 "nodes": [10 "nodes": [
11 {11 {
62 "--unsafe-ws-external",62 "--unsafe-ws-external",
63 "-lparachain::candidate_validation=debug"63 "-lparachain::candidate_validation=debug"
64 ]64 ]
65 }65 },
6666 {
67 "name": "ferdie",
68 "wsPort": 9899,
69 "rpcPort": 9898,
70 "port": 30999,
71 "flags": [
72 "--unsafe-rpc-external",
73 "--unsafe-ws-external",
74 "-lparachain::candidate_validation=debug"
75 ]
76 }
67 ],77 ],
68 "genesis": {78 "genesis": {
69 "runtime": {79 "runtime": {
93 "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug",103 "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug",
94 "--unsafe-rpc-external",104 "--unsafe-rpc-external",
95 "--unsafe-ws-external"105 "--unsafe-ws-external"
96 ]106 ]
97 }107 }
98 ]108 ]
99 },109 },
115 "flags": [125 "flags": [
116 "--unsafe-rpc-external",126 "--unsafe-rpc-external",
117 "--unsafe-ws-external"127 "--unsafe-ws-external"
118 ]128 ]
119 }129 }
120 ]130 ]
121 },131 },
133 "flags": [143 "flags": [
134 "--unsafe-rpc-external",144 "--unsafe-rpc-external",
135 "--unsafe-ws-external",145 "--unsafe-ws-external",
136 "--",146 "--",
137 "--execution=wasm"147 "--execution=wasm"
138 ]148 ]
139 }149 }
152 "flags": [162 "flags": [
153 "--unsafe-rpc-external",163 "--unsafe-rpc-external",
154 "--unsafe-ws-external"164 "--unsafe-ws-external"
155 ]165 ]
156 }166 }
157 ]167 ]
168 },
169 {
170 "bin": "/astar/target/release/astar",
171 "id": "2006",
172 "chain": "astar-dev",
173 "balance": "1000000000000000000000000",
174 "nodes": [
175 {
176 "wsPort": 9949,
177 "port": 31205,
178 "name": "alice",
179 "flags": [
180 "--unsafe-rpc-external",
181 "--unsafe-ws-external"
182 ]
183 }
184 ]
158 }185 }
159 ],186 ],
160 "simpleParachains": [],187 "simpleParachains": [],
194 "recipient": 2037,221 "recipient": 2037,
195 "maxCapacity": 8,222 "maxCapacity": 8,
196 "maxMessageSize": 512223 "maxMessageSize": 512
197 }224 },
225 {
226 "sender": 2006,
227 "recipient": 2037,
228 "maxCapacity": 8,
229 "maxMessageSize": 512
230 },
231 {
232 "sender": 2037,
233 "recipient": 2006,
234 "maxCapacity": 8,
235 "maxMessageSize": 512
236 }
198 ],237 ],
199 "finalization": false238 "finalization": false
200}239}
modified.envdiffbeforeafterboth
7STATEMINT_BUILD_BRANCH=release-parachains-v93707STATEMINT_BUILD_BRANCH=release-parachains-v9370
8ACALA_BUILD_BRANCH=2.12.08ACALA_BUILD_BRANCH=2.12.0
9MOONBEAM_BUILD_BRANCH=runtime-21009MOONBEAM_BUILD_BRANCH=runtime-2100
10ASTAR_BUILD_BRANCH=v4.49.0
10UNIQUE_MAINNET_BRANCH=release-v930033-fix-gas-price11UNIQUE_MAINNET_BRANCH=release-v930033-fix-gas-price
11UNIQUE_REPLICA_FROM=wss://ws.unique.network:44312UNIQUE_REPLICA_FROM=wss://ws.unique.network:443
1213
13KUSAMA_MAINNET_BRANCH=release-v0.9.3714KUSAMA_MAINNET_BRANCH=release-v0.9.37
14STATEMINE_BUILD_BRANCH=release-parachains-v937015STATEMINE_BUILD_BRANCH=release-parachains-v9370
15KARURA_BUILD_BRANCH=release-karura-2.15.016KARURA_BUILD_BRANCH=release-karura-2.15.0
16MOONRIVER_BUILD_BRANCH=runtime-220117MOONRIVER_BUILD_BRANCH=runtime-2201
18SHIDEN_BUILD_BRANCH=v4.49.0
17QUARTZ_MAINNET_BRANCH=release-v930034-fix-gas-price19QUARTZ_MAINNET_BRANCH=release-v930034-fix-gas-price
18QUARTZ_REPLICA_FROM=wss://ws-quartz.unique.network:44320QUARTZ_REPLICA_FROM=wss://ws-quartz.unique.network:443
1921
modified.github/workflows/xcm.ymldiffbeforeafterboth
1818
19 name: Prepare execution matrix19 name: Prepare execution matrix
2020
21 runs-on: [XL]21 runs-on: [self-hosted-ci]
22 outputs:22 outputs:
23 matrix: ${{ steps.create_matrix.outputs.matrix }}23 matrix: ${{ steps.create_matrix.outputs.matrix }}
2424
39 uses: fabiocaccamo/create-matrix-action@v239 uses: fabiocaccamo/create-matrix-action@v2
40 id: create_matrix40 id: create_matrix
41 with:41 with:
42 matrix: |42 matrix: |
43 network {opal}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, runtest {testXcmOpal}43 network {opal}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.WESTMINT_BUILD_BRANCH }}}, runtest {testXcmOpal}
44 network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, runtest {testXcmQuartz}44 network {quartz}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, acala_version {${{ env.KARURA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONRIVER_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINE_BUILD_BRANCH }}}, astar_version {${{ env.SHIDEN_BUILD_BRANCH }}}, runtest {testXcmQuartz}
45 network {unique}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, runtest {testXcmUnique}45 network {unique}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, acala_version {${{ env.ACALA_BUILD_BRANCH }}}, moonbeam_version {${{ env.MOONBEAM_BUILD_BRANCH }}}, cumulus_version {${{ env.STATEMINT_BUILD_BRANCH }}}, astar_version {${{ env.ASTAR_BUILD_BRANCH }}}, runtest {testXcmUnique}
4646
47 xcm-build:47 xcm-build:
48 48
219 shell: bash218 shell: bash
219
220
221 # Check ASTAR version and build it if it doesn't exist in repository
222 - name: Generate ENV related extend Dockerfile file for ASTAR
223 uses: cuchi/jinja2-action@v1.2.0
224 with:
225 template: .docker/Dockerfile-astar.j2
226 output_file: .docker/Dockerfile-astar.${{ matrix.astar_version }}.yml
227 variables: |
228 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}
229 ASTAR_BUILD_BRANCH=${{ matrix.astar_version }}
230
231 - name: Check if the dockerhub repository contains the needed ASTAR version
232 run: |
233 # aquire token
234 TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.CORE_DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.CORE_DOCKERHUB_TOKEN }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
235 export TOKEN=$TOKEN
236
237 # Get TAGS from DOCKERHUB repository
238 ASTAR_TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/uniquenetwork/builder-astar/tags/?page_size=100 | jq -r '."results"[]["name"]')
239 # Show TAGS
240 echo "ASTAR TAGS:"
241 echo $ASTAR_TAGS
242 # Check correct version ASTAR and build it if it doesn't exist in ASTAR TAGS
243 if [[ ${ASTAR_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.astar_version }}"($|[[:space:]]) ]]; then
244 echo "Repository has needed ASTAR version";
245 docker pull uniquenetwork/builder-astar:${{ matrix.astar_version }}
246 else
247 echo "Repository has not needed ASTAR version, so build it";
248 cd .docker/ && docker build --no-cache --file ./Dockerfile-astar.${{ matrix.astar_version }}.yml --tag uniquenetwork/builder-astar:${{ matrix.astar_version }} .
249 echo "Push needed ASTAR version to the repository";
250 docker push uniquenetwork/builder-astar:${{ matrix.astar_version }}
251 fi
252 shell: bash
253
220254
221 - name: Generate ENV related extend launch-config file255 - name: Generate ENV related extend launch-config file
235 with:269 with:
236 template: .docker/Dockerfile-xcm.j2270 template: .docker/Dockerfile-xcm.j2
237 output_file: .docker/Dockerfile-xcm.${{ matrix.network }}.yml271 output_file: .docker/Dockerfile-xcm.${{ matrix.network }}.yml
238 variables: |272 variables: |
239 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}273 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}
240 NETWORK=${{ matrix.network }}274 NETWORK=${{ matrix.network }}
241 POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }}275 POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }}
242 POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} 276 POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }}
243 BRANCH=${{ github.head_ref }}277 BRANCH=${{ github.head_ref }}
244 ACALA_BUILD_BRANCH=${{ matrix.acala_version }}278 ACALA_BUILD_BRANCH=${{ matrix.acala_version }}
245 MOONBEAM_BUILD_BRANCH=${{ matrix.moonbeam_version }}279 ASTAR_BUILD_BRANCH=${{ matrix.astar_version }}
280 MOONBEAM_BUILD_BRANCH=${{ matrix.moonbeam_version }}
246 CUMULUS_BUILD_BRANCH=${{ matrix.cumulus_version }}281 CUMULUS_BUILD_BRANCH=${{ matrix.cumulus_version }}
247282
248 - name: Show build Dockerfile283 - name: Show build Dockerfile
249 run: cat .docker/Dockerfile-xcm.${{ matrix.network }}.yml284 run: cat .docker/Dockerfile-xcm.${{ matrix.network }}.yml
modifiedtests/src/config.tsdiffbeforeafterboth
24 karuraUrl: process.env.acalaUrl || 'ws://127.0.0.1:9946',24 karuraUrl: process.env.acalaUrl || 'ws://127.0.0.1:9946',
25 moonbeamUrl: process.env.moonbeamUrl || 'ws://127.0.0.1:9947',25 moonbeamUrl: process.env.moonbeamUrl || 'ws://127.0.0.1:9947',
26 moonriverUrl: process.env.moonbeamUrl || 'ws://127.0.0.1:9947',26 moonriverUrl: process.env.moonbeamUrl || 'ws://127.0.0.1:9947',
27 astarUrl: process.env.astarUrl || 'ws://127.0.0.1:9949',
28 shidenUrl: process.env.shidenUrl || 'ws://127.0.0.1:9949',
27 westmintUrl: process.env.westmintUrl || 'ws://127.0.0.1:9948',29 westmintUrl: process.env.westmintUrl || 'ws://127.0.0.1:9948',
28 statemineUrl: process.env.statemineUrl || 'ws://127.0.0.1:9948',30 statemineUrl: process.env.statemineUrl || 'ws://127.0.0.1:9948',
29 statemintUrl: process.env.statemintUrl || 'ws://127.0.0.1:9948',31 statemintUrl: process.env.statemintUrl || 'ws://127.0.0.1:9948',
modifiedtests/src/util/index.tsdiffbeforeafterboth
11import config from '../config';11import config from '../config';
12import {ChainHelperBase} from './playgrounds/unique';12import {ChainHelperBase} from './playgrounds/unique';
13import {ILogger} from './playgrounds/types';13import {ILogger} from './playgrounds/types';
14import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper} from './playgrounds/unique.dev';14import {DevUniqueHelper, SilentLogger, SilentConsole, DevMoonbeamHelper, DevMoonriverHelper, DevAcalaHelper, DevKaruraHelper, DevRelayHelper, DevWestmintHelper, DevStatemineHelper, DevStatemintHelper, DevAstarHelper, DevShidenHelper} from './playgrounds/unique.dev';
15import {dirname} from 'path';15import {dirname} from 'path';
16import {fileURLToPath} from 'url';16import {fileURLToPath} from 'url';
1717
101 return usingPlaygroundsGeneral<DevMoonriverHelper>(DevMoonriverHelper, url, code);101 return usingPlaygroundsGeneral<DevMoonriverHelper>(DevMoonriverHelper, url, code);
102};102};
103
104export const usingAstarPlaygrounds = (url: string, code: (helper: DevAstarHelper, privateKey: (seed: string) => Promise<IKeyringPair>) => Promise<void>) => {
105 return usingPlaygroundsGeneral<DevAstarHelper>(DevAstarHelper, url, code);
106};
107
108export const usingShidenPlaygrounds = (url: string, code: (helper: DevShidenHelper, privateKey: (seed: string) => Promise<IKeyringPair>) => Promise<void>) => {
109 return usingPlaygroundsGeneral<DevShidenHelper>(DevShidenHelper, url, code);
110};
103111
104export const MINIMUM_DONOR_FUND = 100_000n;112export const MINIMUM_DONOR_FUND = 100_000n;
105export const DONOR_FUNDING = 2_000_000n;113export const DONOR_FUNDING = 2_000_000n;
modifiedtests/src/util/playgrounds/unique.dev.tsdiffbeforeafterboth
33
4import {stringToU8a} from '@polkadot/util';4import {stringToU8a} from '@polkadot/util';
5import {encodeAddress, mnemonicGenerate} from '@polkadot/util-crypto';5import {encodeAddress, mnemonicGenerate} from '@polkadot/util-crypto';
6import {UniqueHelper, MoonbeamHelper, ChainHelperBase, AcalaHelper, RelayHelper, WestmintHelper} from './unique';6import {UniqueHelper, MoonbeamHelper, ChainHelperBase, AcalaHelper, RelayHelper, WestmintHelper, AstarHelper} from './unique';
7import {ApiPromise, Keyring, WsProvider} from '@polkadot/api';7import {ApiPromise, Keyring, WsProvider} from '@polkadot/api';
8import * as defs from '../../interfaces/definitions';8import * as defs from '../../interfaces/definitions';
9import {IKeyringPair} from '@polkadot/types/types';9import {IKeyringPair} from '@polkadot/types/types';
173 }173 }
174}174}
175
176export class DevAstarHelper extends AstarHelper {
177 wait: WaitGroup;
178
179 constructor(logger: { log: (msg: any, level: any) => void, level: any }, options: {[key: string]: any} = {}) {
180 options.helperBase = options.helperBase ?? DevAstarHelper;
181
182 super(logger, options);
183 this.wait = new WaitGroup(this);
184 }
185}
186
187export class DevShidenHelper extends AstarHelper {
188 wait: WaitGroup;
189
190 constructor(logger: { log: (msg: any, level: any) => void, level: any }, options: {[key: string]: any} = {}) {
191 options.helperBase = options.helperBase ?? DevShidenHelper;
192
193 super(logger, options);
194 this.wait = new WaitGroup(this);
195 }
196}
175197
176export class DevAcalaHelper extends AcalaHelper {198export class DevAcalaHelper extends AcalaHelper {
177 wait: WaitGroup;199 wait: WaitGroup;
modifiedtests/src/util/playgrounds/unique.tsdiffbeforeafterboth
3243 }3243 }
3244}3244}
3245
3246export class AstarHelper extends XcmChainHelper {
3247 balance: SubstrateBalanceGroup<AstarHelper>;
3248 assets: AssetsGroup<AstarHelper>;
3249 xcm: XcmGroup<AstarHelper>;
3250
3251 constructor(logger?: ILogger, options: {[key: string]: any} = {}) {
3252 super(logger, options.helperBase ?? AstarHelper);
3253
3254 this.balance = new SubstrateBalanceGroup(this);
3255 this.assets = new AssetsGroup(this);
3256 this.xcm = new XcmGroup(this, 'polkadotXcm');
3257 }
3258
3259 getSudo<T extends UniqueHelper>() {
3260 // eslint-disable-next-line @typescript-eslint/naming-convention
3261 const SudoHelperType = SudoHelper(this.helperBase);
3262 return this.clone(SudoHelperType) as T;
3263 }
3264}
32453265
3246export class AcalaHelper extends XcmChainHelper {3266export class AcalaHelper extends XcmChainHelper {
3247 balance: SubstrateBalanceGroup<AcalaHelper>;3267 balance: SubstrateBalanceGroup<AcalaHelper>;
modifiedtests/src/xcm/xcmQuartz.test.tsdiffbeforeafterboth
18import {blake2AsHex} from '@polkadot/util-crypto';18import {blake2AsHex} from '@polkadot/util-crypto';
19import config from '../config';19import config from '../config';
20import {XcmV2TraitsError} from '../interfaces';20import {XcmV2TraitsError} from '../interfaces';
21import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds} from '../util';21import {itSub, expect, describeXCM, usingPlaygrounds, usingKaruraPlaygrounds, usingRelayPlaygrounds, usingMoonriverPlaygrounds, usingStateminePlaygrounds, usingShidenPlaygrounds} from '../util';
2222
23const QUARTZ_CHAIN = 2095;23const QUARTZ_CHAIN = 2095;
24const STATEMINE_CHAIN = 1000;24const STATEMINE_CHAIN = 1000;
25const KARURA_CHAIN = 2000;25const KARURA_CHAIN = 2000;
26const MOONRIVER_CHAIN = 2023;26const MOONRIVER_CHAIN = 2023;
27const SHIDEN_CHAIN = 2007;
2728
28const STATEMINE_PALLET_INSTANCE = 50;29const STATEMINE_PALLET_INSTANCE = 50;
2930
30const relayUrl = config.relayUrl;31const relayUrl = config.relayUrl;
31const statemineUrl = config.statemineUrl;32const statemineUrl = config.statemineUrl;
32const karuraUrl = config.karuraUrl;33const karuraUrl = config.karuraUrl;
33const moonriverUrl = config.moonriverUrl;34const moonriverUrl = config.moonriverUrl;
35const shidenUrl = config.shidenUrl;
3436
35const RELAY_DECIMALS = 12;37const RELAY_DECIMALS = 12;
36const STATEMINE_DECIMALS = 12;38const STATEMINE_DECIMALS = 12;
37const KARURA_DECIMALS = 12;39const KARURA_DECIMALS = 12;
40const SHIDEN_DECIMALS = 18n;
41const QTZ_DECIMALS = 18n;
3842
39const TRANSFER_AMOUNT = 2000000000000000000000000n;43const TRANSFER_AMOUNT = 2000000000000000000000000n;
4044
979 });983 });
980});984});
985
986describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => {
987 let alice: IKeyringPair;
988 let sender: IKeyringPair;
989
990 const QTZ_ASSET_ID_ON_SHIDEN = 1;
991 const QTZ_MINIMAL_BALANCE_ON_SHIDEN = 1n;
992
993 // Quartz -> Shiden
994 const shidenInitialBalance = 1n * (10n ** SHIDEN_DECIMALS); // 1 SHD, existential deposit required to actually create the account on Shiden
995 const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours?
996 const qtzToShidenTransferred = 10n * (10n ** QTZ_DECIMALS); // 10 QTZ
997 const qtzToShidenArrived = 9_999_999_999_088_000_000n; // 9.999 ... QTZ, Shiden takes a commision in foreign tokens
998 const senderIinitialBalanceQTZ = 100n * (10n ** QTZ_DECIMALS); // How many QTZ sender has initially
999 const senderBalanceAfterXCM = 89_946678090945539197n; // 89.94... QTZ after XCM call
1000
1001 // Shiden -> Quartz
1002 const qtzFromShidenTransfered = 5n * (10n ** QTZ_DECIMALS); // 5 QTZ
1003 const qtzOnShidenLeft = qtzToShidenArrived - qtzFromShidenTransfered; // 4.999_999_999_088_000_000n QTZ
1004
1005 before(async () => {
1006 await usingPlaygrounds(async (helper, privateKey) => {
1007 alice = await privateKey('//Alice');
1008 [sender] = await helper.arrange.createAccounts([100n], alice);
1009 console.log('sender', sender.address);
1010
1011 // Set the default version to wrap the first message to other chains.
1012 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);
1013 });
1014
1015 await usingShidenPlaygrounds(shidenUrl, async (helper) => {
1016 console.log('1. Create foreign asset and metadata');
1017 // TODO update metadata with values from production
1018 await helper.assets.create(
1019 alice,
1020 QTZ_ASSET_ID_ON_SHIDEN,
1021 alice.address,
1022 QTZ_MINIMAL_BALANCE_ON_SHIDEN,
1023 );
1024
1025 await helper.assets.setMetadata(
1026 alice,
1027 QTZ_ASSET_ID_ON_SHIDEN,
1028 'Cross chain QTZ',
1029 'xcQTZ',
1030 Number(QTZ_DECIMALS),
1031 );
1032
1033 console.log('2. Register asset location on Shiden');
1034 const assetLocation = {
1035 V1: {
1036 parents: 1,
1037 interior: {
1038 X1: {
1039 Parachain: QUARTZ_CHAIN,
1040 },
1041 },
1042 },
1043 };
1044
1045 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, QTZ_ASSET_ID_ON_SHIDEN]);
1046
1047 console.log('3. Set QTZ payment for XCM execution on Shiden');
1048 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);
1049
1050 console.log('4. Transfer 1 SDN to recipient to create the account (needed due to existential balance)');
1051 await helper.balance.transferToSubstrate(alice, sender.address, shidenInitialBalance);
1052 });
1053 });
1054
1055 itSub('Should connect and send QTZ to Shiden', async ({helper}) => {
1056 const destination = {
1057 V2: {
1058 parents: 1,
1059 interior: {
1060 X1: {
1061 Parachain: SHIDEN_CHAIN,
1062 },
1063 },
1064 },
1065 };
1066
1067 const beneficiary = {
1068 V2: {
1069 parents: 0,
1070 interior: {
1071 X1: {
1072 AccountId32: {
1073 network: 'Any',
1074 id: sender.addressRaw,
1075 },
1076 },
1077 },
1078 },
1079 };
1080
1081 const assets = {
1082 V2: [
1083 {
1084 id: {
1085 Concrete: {
1086 parents: 0,
1087 interior: 'Here',
1088 },
1089 },
1090 fun: {
1091 Fungible: qtzToShidenTransferred,
1092 },
1093 },
1094 ],
1095 };
1096
1097 // Initial balance is 100 QTZ
1098 const balanceBefore = await helper.balance.getSubstrate(sender.address);
1099 console.log(`Initial balance is: ${balanceBefore}`);
1100 expect(balanceBefore).to.eq(senderIinitialBalanceQTZ);
1101
1102 const feeAssetItem = 0;
1103 await helper.xcm.limitedReserveTransferAssets(sender, destination, beneficiary, assets, feeAssetItem, 'Unlimited');
1104
1105 // Balance after reserve transfer is less than 90
1106 const balanceAfter = await helper.balance.getSubstrate(sender.address);
1107 console.log(`QTZ Balance on Quartz after XCM is: ${balanceAfter}`);
1108 console.log(`Quartz's QTZ commission is: ${balanceBefore - balanceAfter}`);
1109 expect(balanceAfter).to.eq(senderBalanceAfterXCM);
1110
1111 await usingShidenPlaygrounds(shidenUrl, async (helper) => {
1112 await helper.wait.newBlocks(3);
1113 const xcQTZbalance = await helper.assets.account(QTZ_ASSET_ID_ON_SHIDEN, sender.address);
1114 const shidenBalance = await helper.balance.getSubstrate(sender.address);
1115
1116 console.log(`xcQTZ balance on Shiden after XCM is: ${xcQTZbalance}`);
1117 console.log(`Shiden's QTZ commission is: ${qtzToShidenTransferred - xcQTZbalance!}`);
1118
1119 expect(xcQTZbalance).to.eq(qtzToShidenArrived);
1120 // SHD balance does not changed:
1121 expect(shidenBalance).to.eq(shidenInitialBalance);
1122 });
1123 });
1124
1125 itSub('Should connect to Shiden and send QTZ back', async ({helper}) => {
1126 await usingShidenPlaygrounds(shidenUrl, async (helper) => {
1127 const destination = {
1128 V1: {
1129 parents: 1,
1130 interior: {
1131 X1: {
1132 Parachain: QUARTZ_CHAIN,
1133 },
1134 },
1135 },
1136 };
1137
1138 const beneficiary = {
1139 V1: {
1140 parents: 0,
1141 interior: {
1142 X1: {
1143 AccountId32: {
1144 network: 'Any',
1145 id: sender.addressRaw,
1146 },
1147 },
1148 },
1149 },
1150 };
1151
1152 const assets = {
1153 V1: [
1154 {
1155 id: {
1156 Concrete: {
1157 parents: 1,
1158 interior: {
1159 X1: {
1160 Parachain: QUARTZ_CHAIN,
1161 },
1162 },
1163 },
1164 },
1165 fun: {
1166 Fungible: qtzFromShidenTransfered,
1167 },
1168 },
1169 ],
1170 };
1171
1172 // Initial balance is 1 SDN
1173 const balanceSDNbefore = await helper.balance.getSubstrate(sender.address);
1174 console.log(`SDN balance is: ${balanceSDNbefore}, it does not changed`);
1175 expect(balanceSDNbefore).to.eq(shidenInitialBalance);
1176
1177 const feeAssetItem = 0;
1178 // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw
1179 await helper.executeExtrinsic(sender, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]);
1180
1181 // Balance after reserve transfer is less than 1 SDN
1182 const xcQTZbalance = await helper.assets.account(QTZ_ASSET_ID_ON_SHIDEN, sender.address);
1183 const balanceSDN = await helper.balance.getSubstrate(sender.address);
1184 console.log(`xcQTZ balance on Shiden after XCM is: ${xcQTZbalance}`);
1185
1186 // Assert: xcQTZ balance correctly decreased
1187 expect(xcQTZbalance).to.eq(qtzOnShidenLeft);
1188 // Assert: SDN balance is 0.996...
1189 expect(balanceSDN / (10n ** (SHIDEN_DECIMALS - 3n))).to.eq(996n);
1190 });
1191
1192 await helper.wait.newBlocks(3);
1193 const balanceQTZ = await helper.balance.getSubstrate(sender.address);
1194 console.log(`QTZ Balance on Quartz after XCM is: ${balanceQTZ}`);
1195 expect(balanceQTZ).to.eq(senderBalanceAfterXCM + qtzFromShidenTransfered);
1196 });
1197});
9811198
modifiedtests/src/xcm/xcmUnique.test.tsdiffbeforeafterboth
18import {blake2AsHex} from '@polkadot/util-crypto';18import {blake2AsHex} from '@polkadot/util-crypto';
19import config from '../config';19import config from '../config';
20import {XcmV2TraitsError} from '../interfaces';20import {XcmV2TraitsError} from '../interfaces';
21import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds} from '../util';21import {itSub, expect, describeXCM, usingPlaygrounds, usingAcalaPlaygrounds, usingRelayPlaygrounds, usingMoonbeamPlaygrounds, usingStatemintPlaygrounds, usingAstarPlaygrounds} from '../util';
2222
23const UNIQUE_CHAIN = 2037;23const UNIQUE_CHAIN = 2037;
24const STATEMINT_CHAIN = 1000;24const STATEMINT_CHAIN = 1000;
25const ACALA_CHAIN = 2000;25const ACALA_CHAIN = 2000;
26const MOONBEAM_CHAIN = 2004;26const MOONBEAM_CHAIN = 2004;
27const ASTAR_CHAIN = 2006;
2728
28const STATEMINT_PALLET_INSTANCE = 50;29const STATEMINT_PALLET_INSTANCE = 50;
2930
30const relayUrl = config.relayUrl;31const relayUrl = config.relayUrl;
31const statemintUrl = config.statemintUrl;32const statemintUrl = config.statemintUrl;
32const acalaUrl = config.acalaUrl;33const acalaUrl = config.acalaUrl;
33const moonbeamUrl = config.moonbeamUrl;34const moonbeamUrl = config.moonbeamUrl;
35const astarUrl = config.astarUrl;
3436
35const RELAY_DECIMALS = 12;37const RELAY_DECIMALS = 12;
36const STATEMINT_DECIMALS = 12;38const STATEMINT_DECIMALS = 12;
37const ACALA_DECIMALS = 12;39const ACALA_DECIMALS = 12;
40const ASTAR_DECIMALS = 18n;
41const UNQ_DECIMALS = 18n;
3842
39const TRANSFER_AMOUNT = 2000000000000000000000000n;43const TRANSFER_AMOUNT = 2000000000000000000000000n;
4044
981 });985 });
982});986});
987
988describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => {
989 let alice: IKeyringPair;
990 let randomAccount: IKeyringPair;
991
992 const UNQ_ASSET_ID_ON_SHIDEN = 1;
993 const UNQ_MINIMAL_BALANCE_ON_SHIDEN = 1n;
994
995 // Unique -> Astar
996 const astarInitialBalance = 1n * (10n ** ASTAR_DECIMALS); // 1 ASTR, existential deposit required to actually create the account on Shiden.
997 const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours?
998 const unqToAstarTransferred = 10n * (10n ** UNQ_DECIMALS); // 10 UNQ
999 const unqToAstarArrived = 9_999_999_999_088_000_000n; // 9.999 ... UNQ, Shiden takes a commision in foreign tokens
1000 const senderIinitialBalanceUNQ = 100n * (10n ** UNQ_DECIMALS); // How many UNQ sender has initially
1001 const senderBalanceAfterXCM = 89_946678090945539197n; // 89.94... UNQ after XCM call
1002
1003 // Astar -> Unique
1004 const unqFromAstarTransfered = 5n * (10n ** UNQ_DECIMALS); // 5 UNQ
1005 const unqOnAstarLeft = unqToAstarArrived - unqFromAstarTransfered; // 4.999_999_999_088_000_000n UNQ
1006
1007 before(async () => {
1008 await usingPlaygrounds(async (helper, privateKey) => {
1009 alice = await privateKey('//Alice');
1010 [randomAccount] = await helper.arrange.createAccounts([100n], alice);
1011 console.log('randomAccount', randomAccount.address);
1012
1013 // Set the default version to wrap the first message to other chains.
1014 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);
1015 });
1016
1017 await usingAstarPlaygrounds(astarUrl, async (helper) => {
1018 console.log('1. Create foreign asset and metadata');
1019 // TODO update metadata with values from production
1020 await helper.assets.create(
1021 alice,
1022 UNQ_ASSET_ID_ON_SHIDEN,
1023 alice.address,
1024 UNQ_MINIMAL_BALANCE_ON_SHIDEN,
1025 );
1026
1027 await helper.assets.setMetadata(
1028 alice,
1029 UNQ_ASSET_ID_ON_SHIDEN,
1030 'Cross chain UNQ',
1031 'xcUNQ',
1032 Number(UNQ_DECIMALS),
1033 );
1034
1035 console.log('2. Register asset location on Astar');
1036 const assetLocation = {
1037 V1: {
1038 parents: 1,
1039 interior: {
1040 X1: {
1041 Parachain: UNIQUE_CHAIN,
1042 },
1043 },
1044 },
1045 };
1046
1047 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, UNQ_ASSET_ID_ON_SHIDEN]);
1048
1049 console.log('3. Set UNQ payment for XCM execution on Astar');
1050 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);
1051
1052 console.log('4. Transfer 1 ASTR to recipient to create the account (needed due to existential balance)');
1053 await helper.balance.transferToSubstrate(alice, randomAccount.address, astarInitialBalance);
1054 });
1055 });
1056
1057 itSub('Should connect and send UNQ to Astar', async ({helper}) => {
1058 const destination = {
1059 V2: {
1060 parents: 1,
1061 interior: {
1062 X1: {
1063 Parachain: ASTAR_CHAIN,
1064 },
1065 },
1066 },
1067 };
1068
1069 const beneficiary = {
1070 V2: {
1071 parents: 0,
1072 interior: {
1073 X1: {
1074 AccountId32: {
1075 network: 'Any',
1076 id: randomAccount.addressRaw,
1077 },
1078 },
1079 },
1080 },
1081 };
1082
1083 const assets = {
1084 V2: [
1085 {
1086 id: {
1087 Concrete: {
1088 parents: 0,
1089 interior: 'Here',
1090 },
1091 },
1092 fun: {
1093 Fungible: unqToAstarTransferred,
1094 },
1095 },
1096 ],
1097 };
1098
1099 // Initial balance is 100 UNQ
1100 const balanceBefore = await helper.balance.getSubstrate(randomAccount.address);
1101 console.log(`Initial balance is: ${balanceBefore}`);
1102 expect(balanceBefore).to.eq(senderIinitialBalanceUNQ);
1103
1104 const feeAssetItem = 0;
1105 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');
1106
1107 // Balance after reserve transfer is less than 90
1108 const balanceAfter = await helper.balance.getSubstrate(randomAccount.address);
1109 console.log(`UNQ Balance on Unique after XCM is: ${balanceAfter}`);
1110 console.log(`Unique's UNQ commission is: ${balanceBefore - balanceAfter}`);
1111 expect(balanceAfter).to.eq(senderBalanceAfterXCM);
1112
1113 await usingAstarPlaygrounds(astarUrl, async (helper) => {
1114 await helper.wait.newBlocks(3);
1115 const xcUNQbalance = await helper.assets.account(UNQ_ASSET_ID_ON_SHIDEN, randomAccount.address);
1116 const astarBalance = await helper.balance.getSubstrate(randomAccount.address);
1117
1118 console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`);
1119 console.log(`Astar's UNQ commission is: ${unqToAstarTransferred - xcUNQbalance!}`);
1120
1121 expect(xcUNQbalance).to.eq(unqToAstarArrived);
1122 // Astar balance does not changed
1123 expect(astarBalance).to.eq(astarInitialBalance);
1124 });
1125 });
1126
1127 itSub('Should connect to Astar and send UNQ back', async ({helper}) => {
1128 await usingAstarPlaygrounds(astarUrl, async (helper) => {
1129 const destination = {
1130 V1: {
1131 parents: 1,
1132 interior: {
1133 X1: {
1134 Parachain: UNIQUE_CHAIN,
1135 },
1136 },
1137 },
1138 };
1139
1140 const beneficiary = {
1141 V1: {
1142 parents: 0,
1143 interior: {
1144 X1: {
1145 AccountId32: {
1146 network: 'Any',
1147 id: randomAccount.addressRaw,
1148 },
1149 },
1150 },
1151 },
1152 };
1153
1154 const assets = {
1155 V1: [
1156 {
1157 id: {
1158 Concrete: {
1159 parents: 1,
1160 interior: {
1161 X1: {
1162 Parachain: UNIQUE_CHAIN,
1163 },
1164 },
1165 },
1166 },
1167 fun: {
1168 Fungible: unqFromAstarTransfered,
1169 },
1170 },
1171 ],
1172 };
1173
1174 // Initial balance is 1 ASTR
1175 const balanceASTRbefore = await helper.balance.getSubstrate(randomAccount.address);
1176 console.log(`ASTR balance is: ${balanceASTRbefore}, it does not changed`);
1177 expect(balanceASTRbefore).to.eq(astarInitialBalance);
1178
1179 const feeAssetItem = 0;
1180 // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw
1181 await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]);
1182
1183 const xcUNQbalance = await helper.assets.account(UNQ_ASSET_ID_ON_SHIDEN, randomAccount.address);
1184 const balanceAstar = await helper.balance.getSubstrate(randomAccount.address);
1185 console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`);
1186
1187 // Assert: xcUNQ balance correctly decreased
1188 expect(xcUNQbalance).to.eq(unqOnAstarLeft);
1189 // Assert: ASTR balance is 0.996...
1190 expect(balanceAstar / (10n ** (ASTAR_DECIMALS - 3n))).to.eq(996n);
1191 });
1192
1193 await helper.wait.newBlocks(3);
1194 const balanceUNQ = await helper.balance.getSubstrate(randomAccount.address);
1195 console.log(`UNQ Balance on Unique after XCM is: ${balanceUNQ}`);
1196 expect(balanceUNQ).to.eq(senderBalanceAfterXCM + unqFromAstarTransfered);
1197 });
1198
1199 itSub.skip('Should not accept limitedReserveTransfer of UNQ from ASTAR', async ({helper}) => {
1200 await usingAstarPlaygrounds(astarUrl, async (helper) => {
1201 const destination = {
1202 V1: {
1203 parents: 1,
1204 interior: {
1205 X1: {
1206 Parachain: UNIQUE_CHAIN,
1207 },
1208 },
1209 },
1210 };
1211
1212 const beneficiary = {
1213 V1: {
1214 parents: 0,
1215 interior: {
1216 X1: {
1217 AccountId32: {
1218 network: 'Any',
1219 id: randomAccount.addressRaw,
1220 },
1221 },
1222 },
1223 },
1224 };
1225
1226 const assets = {
1227 V1: [
1228 {
1229 id: {
1230 Concrete: {
1231 parents: 1,
1232 interior: {
1233 X1: {
1234 Parachain: UNIQUE_CHAIN,
1235 },
1236 },
1237 },
1238 },
1239 fun: {
1240 Fungible: unqFromAstarTransfered,
1241 },
1242 },
1243 ],
1244 };
1245
1246 // Initial balance is 1 ASTAR
1247 expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(astarInitialBalance);
1248
1249 const feeAssetItem = 0;
1250 // TODO: expect rejected:
1251 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');
1252 });
1253 });
1254});
9831255