difftreelog
Merge pull request #905 from UniqueNetwork/feature/astar-barrier
in: master
Configure astar barrier
21 files changed
.docker/Dockerfile-acala.j2diffbeforeafterboth383839FROM ubuntu:22.04 as builder-acala39FROM ubuntu:22.04 as builder-acala404041COPY --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/acala4242.docker/Dockerfile-astar.j2diffbeforeafterbothno changes
.docker/Dockerfile-xcm.j2diffbeforeafterboth232324COPY ./xcm-config/launch-config-xcm-{{ NETWORK }}.json ./launch-config-xcm-{{ NETWORK }}.json24COPY ./xcm-config/launch-config-xcm-{{ NETWORK }}.json ./launch-config-xcm-{{ NETWORK }}.json25COPY ./xcm-config/5validators.jsonnet ./5validators.jsonnet25COPY ./xcm-config/5validators.jsonnet ./5validators.jsonnet26COPY ./xcm-config/6validators.jsonnet ./6validators.jsonnet262727RUN 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 && \505151COPY --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.jsonnet54COPY --from=builder-unique /unique_parachain/6validators.jsonnet /polkadot-launch/6validators.jsonnet535554COPY --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/555756COPY --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/cumulus59COPY --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/616462EXPOSE 984465EXPOSE 984465EXPOSE 994668EXPOSE 994666EXPOSE 994769EXPOSE 994767EXPOSE 994870EXPOSE 994871EXPOSE 9949687269CMD 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" && \.docker/additional/xcm-rococo/Dockerfile-xcm-quartz-rococo.tempdiffbeforeafterboth2FROM uniquenetwork/builder-moonbeam:{{ MOONRIVER_BUILD_BRANCH }} as moonbeam2FROM uniquenetwork/builder-moonbeam:{{ MOONRIVER_BUILD_BRANCH }} as moonbeam3FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus3FROM uniquenetwork/builder-cumulus:{{ STATEMINE_BUILD_BRANCH }} as cumulus4FROM uniquenetwork/builder-acala:{{ KARURA_BUILD_BRANCH }} as acala4FROM uniquenetwork/builder-acala:{{ KARURA_BUILD_BRANCH }} as acala5FROM uniquenetwork/builder-astar:{{ SHIDEN_BUILD_BRANCH }} as astar566# ===== Rust builder =====7# ===== Rust builder =====7FROM ubuntu:22.04 as rust-builder8FROM ubuntu:22.04 as rust-builder62 yarn install63 yarn install636464COPY --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.json65COPY --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.jsonnet666767COPY --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/cumulus71COPY --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/737574EXPOSE 984476EXPOSE 984475EXPOSE 994477EXPOSE 994476EXPOSE 994678EXPOSE 994677EXPOSE 994779EXPOSE 994778EXPOSE 994880EXPOSE 994881EXPOSE 9949798280CMD 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" && \.docker/additional/xcm-rococo/Dockerfile-xcm-unique-rococo.tempdiffbeforeafterboth2FROM uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} as moonbeam2FROM uniquenetwork/builder-moonbeam:{{ MOONBEAM_BUILD_BRANCH }} as moonbeam3FROM uniquenetwork/builder-cumulus:{{ STATEMINT_BUILD_BRANCH }} as cumulus3FROM uniquenetwork/builder-cumulus:{{ STATEMINT_BUILD_BRANCH }} as cumulus4FROM uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} as acala4FROM uniquenetwork/builder-acala:{{ ACALA_BUILD_BRANCH }} as acala5FROM uniquenetwork/builder-astar:{{ ASTAR_BUILD_BRANCH }} as astar566# ===== Rust builder =====7# ===== Rust builder =====7FROM ubuntu:22.04 as rust-builder8FROM ubuntu:22.04 as rust-builder62 yarn install63 yarn install636464COPY --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.json65COPY --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.jsonnet666767COPY --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/cumulus71COPY --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/737574EXPOSE 984476EXPOSE 984475EXPOSE 994477EXPOSE 994476EXPOSE 994678EXPOSE 994677EXPOSE 994779EXPOSE 994778EXPOSE 994880EXPOSE 994881EXPOSE 9949798280CMD 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" && \.docker/additional/xcm-rococo/docker-compose-xcm-quartz-rococo.ymldiffbeforeafterboth13 - 994613 - 994614 - 994714 - 994715 - 994815 - 994816 - 994916 ports:17 ports:17 - 127.0.0.1:9844:984418 - 127.0.0.1:9844:984418 - 127.0.0.1:9944:994419 - 127.0.0.1:9944:994419 - 127.0.0.1:9946:994620 - 127.0.0.1:9946:994620 - 127.0.0.1:9947:994721 - 127.0.0.1:9947:994721 - 127.0.0.1:9948:994822 - 127.0.0.1:9948:994823 - 127.0.0.1:9949:994922242325.docker/additional/xcm-rococo/docker-compose-xcm-unique-rococo.ymldiffbeforeafterboth13 - 994613 - 994614 - 994714 - 994715 - 994815 - 994816 - 994916 ports:17 ports:17 - 127.0.0.1:9844:984418 - 127.0.0.1:9844:984418 - 127.0.0.1:9944:994419 - 127.0.0.1:9944:994419 - 127.0.0.1:9946:994620 - 127.0.0.1:9946:994620 - 127.0.0.1:9947:994721 - 127.0.0.1:9947:994721 - 127.0.0.1:9948:994822 - 127.0.0.1:9948:994823 - 127.0.0.1:9949:994922242325.docker/additional/xcm-rococo/launch-config-xcm-quartz-rococo.jsondiffbeforeafterboth5 "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": 512197 }224 },225 {226 "sender": 2007,227 "recipient": 2095,228 "maxCapacity": 8,229 "maxMessageSize": 512230 },231 {232 "sender": 2095,233 "recipient": 2007,234 "maxCapacity": 8,235 "maxMessageSize": 512236 } 198 ],237 ],199 "finalization": false238 "finalization": false200}239}.docker/additional/xcm-rococo/launch-config-xcm-unique-rococo.jsondiffbeforeafterboth5 "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": 512197 }224 },225 {226 "sender": 2006,227 "recipient": 2037,228 "maxCapacity": 8,229 "maxMessageSize": 512230 },231 {232 "sender": 2037,233 "recipient": 2006,234 "maxCapacity": 8,235 "maxMessageSize": 512236 } 198 ],237 ],199 "finalization": false238 "finalization": false200}239}.docker/docker-compose.tmp-xcm-tests.j2diffbeforeafterboth11 - 994611 - 994612 - 994712 - 994713 - 994813 - 994814 - 994914 ports:15 ports:15 - 127.0.0.1:9844:984416 - 127.0.0.1:9844:984416 - 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:994418 - 127.0.0.1:9946:994619 - 127.0.0.1:9946:994619 - 127.0.0.1:9947:994720 - 127.0.0.1:9947:994720 - 127.0.0.1:9948:994821 - 127.0.0.1:9948:994822 - 127.0.0.1:9949:994921 logging:23 logging:22 options:24 options:23 max-size: "1m"25 max-size: "1m".docker/xcm-config/6validators.jsonnetdiffbeforeafterbothno changes
.docker/xcm-config/launch-config-xcm-quartz.j2diffbeforeafterboth5 "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 }6667 ],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": 512197 }224 },225 {226 "sender": 2007,227 "recipient": 2095,228 "maxCapacity": 8,229 "maxMessageSize": 512230 },231 {232 "sender": 2095,233 "recipient": 2007,234 "maxCapacity": 8,235 "maxMessageSize": 512236 } 198 ],237 ],199 "finalization": false238 "finalization": false200}239}.docker/xcm-config/launch-config-xcm-unique.j2diffbeforeafterboth5 "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": 512197 }224 },225 {226 "sender": 2006,227 "recipient": 2037,228 "maxCapacity": 8,229 "maxMessageSize": 512230 },231 {232 "sender": 2037,233 "recipient": 2006,234 "maxCapacity": 8,235 "maxMessageSize": 512236 } 198 ],237 ],199 "finalization": false238 "finalization": false200}239}.envdiffbeforeafterboth7STATEMINT_BUILD_BRANCH=release-parachains-v93707STATEMINT_BUILD_BRANCH=release-parachains-v93708ACALA_BUILD_BRANCH=2.12.08ACALA_BUILD_BRANCH=2.12.09MOONBEAM_BUILD_BRANCH=runtime-21009MOONBEAM_BUILD_BRANCH=runtime-210010ASTAR_BUILD_BRANCH=v4.49.010UNIQUE_MAINNET_BRANCH=release-v930033-fix-gas-price11UNIQUE_MAINNET_BRANCH=release-v930033-fix-gas-price11UNIQUE_REPLICA_FROM=wss://ws.unique.network:44312UNIQUE_REPLICA_FROM=wss://ws.unique.network:443121313KUSAMA_MAINNET_BRANCH=release-v0.9.3714KUSAMA_MAINNET_BRANCH=release-v0.9.3714STATEMINE_BUILD_BRANCH=release-parachains-v937015STATEMINE_BUILD_BRANCH=release-parachains-v937015KARURA_BUILD_BRANCH=release-karura-2.15.016KARURA_BUILD_BRANCH=release-karura-2.15.016MOONRIVER_BUILD_BRANCH=runtime-220117MOONRIVER_BUILD_BRANCH=runtime-220118SHIDEN_BUILD_BRANCH=v4.49.017QUARTZ_MAINNET_BRANCH=release-v930034-fix-gas-price19QUARTZ_MAINNET_BRANCH=release-v930034-fix-gas-price18QUARTZ_REPLICA_FROM=wss://ws-quartz.unique.network:44320QUARTZ_REPLICA_FROM=wss://ws-quartz.unique.network:4431921.github/workflows/xcm.ymldiffbeforeafterboth181819 name: Prepare execution matrix19 name: Prepare execution matrix202021 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 }}242439 uses: fabiocaccamo/create-matrix-action@v239 uses: fabiocaccamo/create-matrix-action@v240 id: create_matrix40 id: create_matrix41 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}464647 xcm-build:47 xcm-build:48 48 219 shell: bash218 shell: bash219220221 # Check ASTAR version and build it if it doesn't exist in repository222 - name: Generate ENV related extend Dockerfile file for ASTAR223 uses: cuchi/jinja2-action@v1.2.0224 with:225 template: .docker/Dockerfile-astar.j2226 output_file: .docker/Dockerfile-astar.${{ matrix.astar_version }}.yml227 variables: |228 RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}229 ASTAR_BUILD_BRANCH=${{ matrix.astar_version }}230231 - name: Check if the dockerhub repository contains the needed ASTAR version232 run: |233 # aquire token234 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=$TOKEN236237 # Get TAGS from DOCKERHUB repository238 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 TAGS240 echo "ASTAR TAGS:"241 echo $ASTAR_TAGS242 # Check correct version ASTAR and build it if it doesn't exist in ASTAR TAGS243 if [[ ${ASTAR_TAGS[*]} =~ (^|[[:space:]])"${{ matrix.astar_version }}"($|[[:space:]]) ]]; then244 echo "Repository has needed ASTAR version";245 docker pull uniquenetwork/builder-astar:${{ matrix.astar_version }}246 else247 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 fi252 shell: bash253220254221 - name: Generate ENV related extend launch-config file255 - name: Generate ENV related extend launch-config file235 with:269 with:236 template: .docker/Dockerfile-xcm.j2270 template: .docker/Dockerfile-xcm.j2237 output_file: .docker/Dockerfile-xcm.${{ matrix.network }}.yml271 output_file: .docker/Dockerfile-xcm.${{ matrix.network }}.yml238 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 }}247282248 - name: Show build Dockerfile283 - name: Show build Dockerfile249 run: cat .docker/Dockerfile-xcm.${{ matrix.network }}.yml284 run: cat .docker/Dockerfile-xcm.${{ matrix.network }}.ymltests/src/config.tsdiffbeforeafterboth24 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',tests/src/util/index.tsdiffbeforeafterboth11import 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';1717101 return usingPlaygroundsGeneral<DevMoonriverHelper>(DevMoonriverHelper, url, code);101 return usingPlaygroundsGeneral<DevMoonriverHelper>(DevMoonriverHelper, url, code);102};102};103104export const usingAstarPlaygrounds = (url: string, code: (helper: DevAstarHelper, privateKey: (seed: string) => Promise<IKeyringPair>) => Promise<void>) => {105 return usingPlaygroundsGeneral<DevAstarHelper>(DevAstarHelper, url, code);106};107108export const usingShidenPlaygrounds = (url: string, code: (helper: DevShidenHelper, privateKey: (seed: string) => Promise<IKeyringPair>) => Promise<void>) => {109 return usingPlaygroundsGeneral<DevShidenHelper>(DevShidenHelper, url, code);110};103111104export 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;tests/src/util/playgrounds/unique.dev.tsdiffbeforeafterboth334import {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}175176export class DevAstarHelper extends AstarHelper {177 wait: WaitGroup;178179 constructor(logger: { log: (msg: any, level: any) => void, level: any }, options: {[key: string]: any} = {}) {180 options.helperBase = options.helperBase ?? DevAstarHelper;181182 super(logger, options);183 this.wait = new WaitGroup(this);184 }185}186187export class DevShidenHelper extends AstarHelper {188 wait: WaitGroup;189190 constructor(logger: { log: (msg: any, level: any) => void, level: any }, options: {[key: string]: any} = {}) {191 options.helperBase = options.helperBase ?? DevShidenHelper;192193 super(logger, options);194 this.wait = new WaitGroup(this);195 }196}175197176export class DevAcalaHelper extends AcalaHelper {198export class DevAcalaHelper extends AcalaHelper {177 wait: WaitGroup;199 wait: WaitGroup;tests/src/util/playgrounds/unique.tsdiffbeforeafterboth3243 }3243 }3244}3244}32453246export class AstarHelper extends XcmChainHelper {3247 balance: SubstrateBalanceGroup<AstarHelper>;3248 assets: AssetsGroup<AstarHelper>;3249 xcm: XcmGroup<AstarHelper>;32503251 constructor(logger?: ILogger, options: {[key: string]: any} = {}) {3252 super(logger, options.helperBase ?? AstarHelper);32533254 this.balance = new SubstrateBalanceGroup(this);3255 this.assets = new AssetsGroup(this);3256 this.xcm = new XcmGroup(this, 'polkadotXcm');3257 }32583259 getSudo<T extends UniqueHelper>() {3260 // eslint-disable-next-line @typescript-eslint/naming-convention3261 const SudoHelperType = SudoHelper(this.helperBase);3262 return this.clone(SudoHelperType) as T;3263 }3264}324532653246export class AcalaHelper extends XcmChainHelper {3266export class AcalaHelper extends XcmChainHelper {3247 balance: SubstrateBalanceGroup<AcalaHelper>;3267 balance: SubstrateBalanceGroup<AcalaHelper>;tests/src/xcm/xcmQuartz.test.tsdiffbeforeafterboth18import {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';222223const 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;272828const STATEMINE_PALLET_INSTANCE = 50;29const STATEMINE_PALLET_INSTANCE = 50;293030const 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;343635const 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;384239const TRANSFER_AMOUNT = 2000000000000000000000000n;43const TRANSFER_AMOUNT = 2000000000000000000000000n;4044979 });983 });980});984});985986describeXCM('[XCM] Integration test: Exchanging tokens with Shiden', () => {987 let alice: IKeyringPair;988 let sender: IKeyringPair;989990 const QTZ_ASSET_ID_ON_SHIDEN = 1;991 const QTZ_MINIMAL_BALANCE_ON_SHIDEN = 1n;992993 // Quartz -> Shiden994 const shidenInitialBalance = 1n * (10n ** SHIDEN_DECIMALS); // 1 SHD, existential deposit required to actually create the account on Shiden995 const unitsPerSecond = 228_000_000_000n; // This is Phala's value. What will be ours?996 const qtzToShidenTransferred = 10n * (10n ** QTZ_DECIMALS); // 10 QTZ997 const qtzToShidenArrived = 9_999_999_999_088_000_000n; // 9.999 ... QTZ, Shiden takes a commision in foreign tokens998 const senderIinitialBalanceQTZ = 100n * (10n ** QTZ_DECIMALS); // How many QTZ sender has initially999 const senderBalanceAfterXCM = 89_946678090945539197n; // 89.94... QTZ after XCM call10001001 // Shiden -> Quartz1002 const qtzFromShidenTransfered = 5n * (10n ** QTZ_DECIMALS); // 5 QTZ1003 const qtzOnShidenLeft = qtzToShidenArrived - qtzFromShidenTransfered; // 4.999_999_999_088_000_000n QTZ10041005 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);10101011 // Set the default version to wrap the first message to other chains.1012 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);1013 });10141015 await usingShidenPlaygrounds(shidenUrl, async (helper) => {1016 console.log('1. Create foreign asset and metadata');1017 // TODO update metadata with values from production1018 await helper.assets.create(1019 alice,1020 QTZ_ASSET_ID_ON_SHIDEN,1021 alice.address,1022 QTZ_MINIMAL_BALANCE_ON_SHIDEN,1023 );10241025 await helper.assets.setMetadata(1026 alice,1027 QTZ_ASSET_ID_ON_SHIDEN,1028 'Cross chain QTZ',1029 'xcQTZ',1030 Number(QTZ_DECIMALS),1031 );10321033 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 };10441045 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, QTZ_ASSET_ID_ON_SHIDEN]);10461047 console.log('3. Set QTZ payment for XCM execution on Shiden');1048 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);10491050 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 });10541055 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 };10661067 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 };10801081 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 };10961097 // Initial balance is 100 QTZ1098 const balanceBefore = await helper.balance.getSubstrate(sender.address);1099 console.log(`Initial balance is: ${balanceBefore}`);1100 expect(balanceBefore).to.eq(senderIinitialBalanceQTZ);11011102 const feeAssetItem = 0;1103 await helper.xcm.limitedReserveTransferAssets(sender, destination, beneficiary, assets, feeAssetItem, 'Unlimited');11041105 // Balance after reserve transfer is less than 901106 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);11101111 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);11151116 console.log(`xcQTZ balance on Shiden after XCM is: ${xcQTZbalance}`);1117 console.log(`Shiden's QTZ commission is: ${qtzToShidenTransferred - xcQTZbalance!}`);11181119 expect(xcQTZbalance).to.eq(qtzToShidenArrived);1120 // SHD balance does not changed:1121 expect(shidenBalance).to.eq(shidenInitialBalance);1122 });1123 });11241125 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 };11371138 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 };11511152 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 };11711172 // Initial balance is 1 SDN1173 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);11761177 const feeAssetItem = 0;1178 // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw1179 await helper.executeExtrinsic(sender, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]);11801181 // Balance after reserve transfer is less than 1 SDN1182 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}`);11851186 // Assert: xcQTZ balance correctly decreased1187 expect(xcQTZbalance).to.eq(qtzOnShidenLeft);1188 // Assert: SDN balance is 0.996...1189 expect(balanceSDN / (10n ** (SHIDEN_DECIMALS - 3n))).to.eq(996n);1190 });11911192 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});9811198tests/src/xcm/xcmUnique.test.tsdiffbeforeafterboth18import {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';222223const 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;272828const STATEMINT_PALLET_INSTANCE = 50;29const STATEMINT_PALLET_INSTANCE = 50;293030const 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;343635const 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;384239const TRANSFER_AMOUNT = 2000000000000000000000000n;43const TRANSFER_AMOUNT = 2000000000000000000000000n;4044981 });985 });982});986});987988describeXCM('[XCM] Integration test: Exchanging tokens with Astar', () => {989 let alice: IKeyringPair;990 let randomAccount: IKeyringPair;991992 const UNQ_ASSET_ID_ON_SHIDEN = 1;993 const UNQ_MINIMAL_BALANCE_ON_SHIDEN = 1n;994995 // Unique -> Astar996 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 UNQ999 const unqToAstarArrived = 9_999_999_999_088_000_000n; // 9.999 ... UNQ, Shiden takes a commision in foreign tokens1000 const senderIinitialBalanceUNQ = 100n * (10n ** UNQ_DECIMALS); // How many UNQ sender has initially1001 const senderBalanceAfterXCM = 89_946678090945539197n; // 89.94... UNQ after XCM call10021003 // Astar -> Unique1004 const unqFromAstarTransfered = 5n * (10n ** UNQ_DECIMALS); // 5 UNQ1005 const unqOnAstarLeft = unqToAstarArrived - unqFromAstarTransfered; // 4.999_999_999_088_000_000n UNQ10061007 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);10121013 // Set the default version to wrap the first message to other chains.1014 await helper.getSudo().xcm.setSafeXcmVersion(alice, SAFE_XCM_VERSION);1015 });10161017 await usingAstarPlaygrounds(astarUrl, async (helper) => {1018 console.log('1. Create foreign asset and metadata');1019 // TODO update metadata with values from production1020 await helper.assets.create(1021 alice,1022 UNQ_ASSET_ID_ON_SHIDEN,1023 alice.address,1024 UNQ_MINIMAL_BALANCE_ON_SHIDEN,1025 );10261027 await helper.assets.setMetadata(1028 alice,1029 UNQ_ASSET_ID_ON_SHIDEN,1030 'Cross chain UNQ',1031 'xcUNQ',1032 Number(UNQ_DECIMALS),1033 );10341035 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 };10461047 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.registerAssetLocation', [assetLocation, UNQ_ASSET_ID_ON_SHIDEN]);10481049 console.log('3. Set UNQ payment for XCM execution on Astar');1050 await helper.getSudo().executeExtrinsic(alice, 'api.tx.xcAssetConfig.setAssetUnitsPerSecond', [assetLocation, unitsPerSecond]);10511052 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 });10561057 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 };10681069 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 };10821083 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 };10981099 // Initial balance is 100 UNQ1100 const balanceBefore = await helper.balance.getSubstrate(randomAccount.address);1101 console.log(`Initial balance is: ${balanceBefore}`);1102 expect(balanceBefore).to.eq(senderIinitialBalanceUNQ);11031104 const feeAssetItem = 0;1105 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');11061107 // Balance after reserve transfer is less than 901108 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);11121113 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);11171118 console.log(`xcUNQ balance on Astar after XCM is: ${xcUNQbalance}`);1119 console.log(`Astar's UNQ commission is: ${unqToAstarTransferred - xcUNQbalance!}`);11201121 expect(xcUNQbalance).to.eq(unqToAstarArrived);1122 // Astar balance does not changed1123 expect(astarBalance).to.eq(astarInitialBalance);1124 });1125 });11261127 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 };11391140 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 };11531154 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 };11731174 // Initial balance is 1 ASTR1175 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);11781179 const feeAssetItem = 0;1180 // this is non-standard polkadotXcm extension for Astar only. It calls InitiateReserveWithdraw1181 await helper.executeExtrinsic(randomAccount, 'api.tx.polkadotXcm.reserveWithdrawAssets', [destination, beneficiary, assets, feeAssetItem]);11821183 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}`);11861187 // Assert: xcUNQ balance correctly decreased1188 expect(xcUNQbalance).to.eq(unqOnAstarLeft);1189 // Assert: ASTR balance is 0.996...1190 expect(balanceAstar / (10n ** (ASTAR_DECIMALS - 3n))).to.eq(996n);1191 });11921193 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 });11981199 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 };12111212 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 };12251226 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 };12451246 // Initial balance is 1 ASTAR1247 expect(await helper.balance.getSubstrate(randomAccount.address)).to.eq(astarInitialBalance);12481249 const feeAssetItem = 0;1250 // TODO: expect rejected:1251 await helper.xcm.limitedReserveTransferAssets(randomAccount, destination, beneficiary, assets, feeAssetItem, 'Unlimited');1252 });1253 });1254});9831255