From 760db3c81072a4290ca8fbca6dddd47f335f2028 Mon Sep 17 00:00:00 2001 From: A5 Pickle Date: Tue, 2 May 2023 16:22:30 +0000 Subject: [PATCH] sui: redesign Wormhole and Token Bridge contracts --- .github/workflows/build.yml | 6 +- .gitignore | 2 + Dockerfile.const | 1 + sui/.gitignore | 2 +- sui/Docker.md | 11 +- sui/Dockerfile | 34 +- sui/Dockerfile.base | 5 +- sui/Makefile | 18 +- sui/NOTES.md | 2 + sui/README.md | 141 +- sui/coin/Move.toml | 11 - sui/coin/sources/coin.move | 24 - sui/devnet/client.yaml | 12 + sui/devnet/fullnode.yaml | 45 + sui/devnet/genesis.blob | Bin 0 -> 202349 bytes sui/devnet/network.yaml | 297 + sui/devnet/sui.keystore | 7 + sui/devnet/validator-config-0.yaml | 73 + sui/devnet/validator-config-1.yaml | 73 + sui/devnet/validator-config-2.yaml | 73 + sui/devnet/validator-config-3.yaml | 73 + sui/examples/coins/.gitignore | 1 + sui/examples/coins/Makefile | 15 + sui/examples/coins/Move.devnet.toml | 17 + sui/examples/coins/Move.lock | 45 + sui/examples/coins/Move.toml | 28 + sui/examples/coins/sources/coin.move | 210 + sui/examples/coins/sources/coin_10.move | 72 + sui/examples/coins/sources/coin_8.move | 72 + sui/examples/core_messages/Makefile | 20 + sui/examples/core_messages/Move.devnet.toml | 14 + sui/examples/core_messages/Move.lock | 32 + sui/examples/core_messages/Move.toml | 21 + .../core_messages/sources/sender.move | 149 + sui/examples/templates/README.md | 3 + sui/examples/templates/wrapped_coin/Move.toml | 19 + .../templates/wrapped_coin/sources/coin.move | 21 + sui/scripts/create_wrapped.sh | 15 - sui/scripts/deploy.sh | 149 +- sui/scripts/deploy_coin.sh | 14 - sui/scripts/faucet.sh | 2 - sui/scripts/funder.sh | 3 - sui/scripts/generate_account.ts | 10 - sui/scripts/get_new_emitter.sh | 5 - sui/scripts/import_account_and_deploy.sh | 24 - sui/scripts/init_tokenbridge.sh | 5 - sui/scripts/init_wormhole.sh | 5 - sui/scripts/node_builder.sh | 2 + sui/scripts/package-lock.json | 804 --- sui/scripts/package.json | 16 - sui/scripts/publish_message.sh | 5 - sui/scripts/register_devnet.sh | 22 + sui/scripts/start_node.sh | 14 +- sui/scripts/test.ts | 0 sui/scripts/wait_for_devnet.sh | 9 + sui/testing/.gitignore | 4 + sui/testing/Makefile | 13 + sui/testing/js/00_environment.ts | 78 + sui/testing/js/01_wormhole.ts | 109 + sui/testing/js/helpers/build.ts | 32 + sui/testing/js/helpers/consts.ts | 40 + sui/testing/js/helpers/error/moveAbort.ts | 42 + sui/testing/js/helpers/error/wormhole.ts | 22 + sui/testing/js/helpers/setup.ts | 75 + sui/testing/js/helpers/upgrade.ts | 73 + sui/testing/js/helpers/utils.ts | 27 + .../js/helpers/wormhole/testPublishMessage.ts | 31 + sui/testing/package-lock.json | 5917 +++++++++++++++++ sui/testing/package.json | 22 + sui/testing/run_integration_test.sh | 35 + sui/testing/scripts/upgrade-token-bridge.ts | 300 + sui/testing/scripts/upgrade-wormhole.ts | 267 + sui/testing/sui_config/client.yaml | 12 + sui/testing/sui_config/fullnode.yaml | 53 + sui/testing/sui_config/genesis.blob | Bin 0 -> 237155 bytes sui/testing/sui_config/network.yaml | 324 + sui/testing/sui_config/sui.keystore | 7 + .../sui_config/validator-config-0.yaml | 81 + .../sui_config/validator-config-1.yaml | 81 + .../sui_config/validator-config-2.yaml | 81 + .../sui_config/validator-config-3.yaml | 81 + sui/testing/tsconfig.json | 12 + sui/tests/go.mod | 13 - sui/tests/go.sum | 14 - sui/tests/watcher.go | 147 - sui/tests/ws.py | 94 - sui/token_bridge/.gitignore | 1 + sui/token_bridge/Makefile | 18 +- sui/token_bridge/Move.devnet.toml | 14 + sui/token_bridge/Move.lock | 32 + sui/token_bridge/Move.testnet.toml | 15 + sui/token_bridge/Move.toml | 21 +- sui/token_bridge/README.md | 60 - sui/token_bridge/sources/attest_token.move | 455 +- sui/token_bridge/sources/bridge_state.move | 510 -- .../sources/complete_transfer.move | 1784 +++-- .../complete_transfer_with_payload.move | 775 +++ sui/token_bridge/sources/create_wrapped.move | 642 ++ .../sources/datatypes/normalized_amount.move | 167 + sui/token_bridge/sources/dynamic_set.move | 45 - .../sources/governance/register_chain.move | 297 + .../sources/governance/upgrade_contract.move | 125 + .../sources/messages/asset_meta.move | 251 + .../sources/messages/transfer.move | 311 + .../messages/transfer_with_payload.move | 352 + sui/token_bridge/sources/migrate.move | 216 + .../sources/newtypes/normalized_amount.move | 74 - .../sources/newtypes/string32.move | 171 - sui/token_bridge/sources/register_chain.move | 229 - .../sources/resources/native_asset.move | 220 + .../sources/resources/token_registry.move | 784 +++ .../sources/resources/wrapped_asset.move | 806 +++ sui/token_bridge/sources/setup.move | 77 + sui/token_bridge/sources/state.move | 396 ++ .../sources/structs/asset_meta.move | 99 - .../sources/structs/transfer.move | 149 - .../sources/structs/transfer_result.move | 44 - .../structs/transfer_with_payload.move | 122 - .../sources/test/coin_native_10.move | 165 + .../sources/test/coin_native_4.move | 165 + .../sources/test/coin_wrapped_12.move | 191 + .../sources/test/coin_wrapped_7.move | 193 + .../sources/test/dummy_message.move | 146 + .../sources/test/token_bridge_scenario.move | 136 + .../sources/testing/native_coin.move | 32 - .../sources/testing/native_coin_v2.move | 32 - .../sources/testing/wrapped_coin.move | 112 - sui/token_bridge/sources/transfer_tokens.move | 1130 +++- .../sources/transfer_tokens_with_payload.move | 812 +++ .../sources/utils/coin_utils.move | 48 + .../sources/utils/string_utils.move | 97 + sui/token_bridge/sources/vaa.move | 490 +- sui/token_bridge/sources/version_control.move | 72 + sui/token_bridge/sources/wrapped.move | 132 - sui/wormhole/.gitignore | 1 + sui/wormhole/Makefile | 18 +- sui/wormhole/Move.devnet.toml | 11 + sui/wormhole/Move.lock | 20 + sui/wormhole/Move.testnet.toml | 12 + sui/wormhole/Move.toml | 13 +- sui/wormhole/README.md | 2 +- sui/wormhole/sources/cursor.move | 47 - sui/wormhole/sources/datatypes/bytes20.move | 176 + sui/wormhole/sources/datatypes/bytes32.move | 287 + .../sources/datatypes/external_address.move | 102 + .../sources/datatypes/guardian_signature.move | 64 + sui/wormhole/sources/deserialize.move | 138 - sui/wormhole/sources/emitter.move | 218 +- sui/wormhole/sources/external_address.move | 166 - sui/wormhole/sources/governance/set_fee.move | 343 + .../sources/governance/transfer_fee.move | 529 ++ .../governance/update_guardian_set.move | 471 ++ .../sources/governance/upgrade_contract.move | 126 + sui/wormhole/sources/governance_message.move | 694 ++ sui/wormhole/sources/guardian_pubkey.move | 82 - .../sources/guardian_set_upgrade.move | 188 - sui/wormhole/sources/keccack256.move | 16 - sui/wormhole/sources/migrate.move | 220 + sui/wormhole/sources/myu16.move | 40 - sui/wormhole/sources/myu256.move | 888 --- sui/wormhole/sources/myu32.move | 44 - sui/wormhole/sources/myvaa.move | 548 -- sui/wormhole/sources/publish_message.move | 426 ++ .../sources/resources/consumed_vaas.move | 29 + .../sources/resources/fee_collector.move | 170 + sui/wormhole/sources/resources/guardian.move | 83 + .../sources/resources/guardian_set.move | 193 + sui/wormhole/sources/resources/set.move | 88 + sui/wormhole/sources/serialize.move | 137 - sui/wormhole/sources/set.move | 33 - sui/wormhole/sources/setup.move | 326 + sui/wormhole/sources/state.move | 643 +- sui/wormhole/sources/structs.move | 69 - .../sources/test/wormhole_scenario.move | 224 + sui/wormhole/sources/utils/bytes.move | 232 + sui/wormhole/sources/utils/cursor.move | 60 + sui/wormhole/sources/utils/package_utils.move | 422 ++ sui/wormhole/sources/vaa.move | 782 +++ sui/wormhole/sources/version_control.move | 70 + sui/wormhole/sources/wormhole.move | 94 - 180 files changed, 26627 insertions(+), 6973 deletions(-) mode change 100644 => 100755 sui/Docker.md delete mode 100644 sui/coin/Move.toml delete mode 100644 sui/coin/sources/coin.move create mode 100644 sui/devnet/client.yaml create mode 100644 sui/devnet/fullnode.yaml create mode 100644 sui/devnet/genesis.blob create mode 100644 sui/devnet/network.yaml create mode 100644 sui/devnet/sui.keystore create mode 100644 sui/devnet/validator-config-0.yaml create mode 100644 sui/devnet/validator-config-1.yaml create mode 100644 sui/devnet/validator-config-2.yaml create mode 100644 sui/devnet/validator-config-3.yaml create mode 100644 sui/examples/coins/.gitignore create mode 100644 sui/examples/coins/Makefile create mode 100644 sui/examples/coins/Move.devnet.toml create mode 100644 sui/examples/coins/Move.lock create mode 100644 sui/examples/coins/Move.toml create mode 100644 sui/examples/coins/sources/coin.move create mode 100644 sui/examples/coins/sources/coin_10.move create mode 100644 sui/examples/coins/sources/coin_8.move create mode 100644 sui/examples/core_messages/Makefile create mode 100644 sui/examples/core_messages/Move.devnet.toml create mode 100644 sui/examples/core_messages/Move.lock create mode 100644 sui/examples/core_messages/Move.toml create mode 100644 sui/examples/core_messages/sources/sender.move create mode 100644 sui/examples/templates/README.md create mode 100644 sui/examples/templates/wrapped_coin/Move.toml create mode 100644 sui/examples/templates/wrapped_coin/sources/coin.move delete mode 100755 sui/scripts/create_wrapped.sh delete mode 100755 sui/scripts/deploy_coin.sh delete mode 100755 sui/scripts/faucet.sh delete mode 100755 sui/scripts/funder.sh delete mode 100644 sui/scripts/generate_account.ts delete mode 100644 sui/scripts/get_new_emitter.sh delete mode 100755 sui/scripts/import_account_and_deploy.sh delete mode 100644 sui/scripts/init_tokenbridge.sh delete mode 100755 sui/scripts/init_wormhole.sh delete mode 100644 sui/scripts/package-lock.json delete mode 100644 sui/scripts/package.json delete mode 100755 sui/scripts/publish_message.sh create mode 100755 sui/scripts/register_devnet.sh delete mode 100644 sui/scripts/test.ts create mode 100755 sui/scripts/wait_for_devnet.sh create mode 100644 sui/testing/.gitignore create mode 100644 sui/testing/Makefile create mode 100644 sui/testing/js/00_environment.ts create mode 100644 sui/testing/js/01_wormhole.ts create mode 100644 sui/testing/js/helpers/build.ts create mode 100644 sui/testing/js/helpers/consts.ts create mode 100644 sui/testing/js/helpers/error/moveAbort.ts create mode 100644 sui/testing/js/helpers/error/wormhole.ts create mode 100644 sui/testing/js/helpers/setup.ts create mode 100644 sui/testing/js/helpers/upgrade.ts create mode 100644 sui/testing/js/helpers/utils.ts create mode 100644 sui/testing/js/helpers/wormhole/testPublishMessage.ts create mode 100644 sui/testing/package-lock.json create mode 100644 sui/testing/package.json create mode 100755 sui/testing/run_integration_test.sh create mode 100644 sui/testing/scripts/upgrade-token-bridge.ts create mode 100644 sui/testing/scripts/upgrade-wormhole.ts create mode 100644 sui/testing/sui_config/client.yaml create mode 100644 sui/testing/sui_config/fullnode.yaml create mode 100644 sui/testing/sui_config/genesis.blob create mode 100644 sui/testing/sui_config/network.yaml create mode 100644 sui/testing/sui_config/sui.keystore create mode 100644 sui/testing/sui_config/validator-config-0.yaml create mode 100644 sui/testing/sui_config/validator-config-1.yaml create mode 100644 sui/testing/sui_config/validator-config-2.yaml create mode 100644 sui/testing/sui_config/validator-config-3.yaml create mode 100644 sui/testing/tsconfig.json delete mode 100644 sui/tests/go.mod delete mode 100644 sui/tests/go.sum delete mode 100644 sui/tests/watcher.go delete mode 100644 sui/tests/ws.py create mode 100644 sui/token_bridge/.gitignore create mode 100644 sui/token_bridge/Move.devnet.toml create mode 100644 sui/token_bridge/Move.lock create mode 100644 sui/token_bridge/Move.testnet.toml delete mode 100644 sui/token_bridge/README.md delete mode 100644 sui/token_bridge/sources/bridge_state.move create mode 100644 sui/token_bridge/sources/complete_transfer_with_payload.move create mode 100644 sui/token_bridge/sources/create_wrapped.move create mode 100644 sui/token_bridge/sources/datatypes/normalized_amount.move delete mode 100644 sui/token_bridge/sources/dynamic_set.move create mode 100644 sui/token_bridge/sources/governance/register_chain.move create mode 100644 sui/token_bridge/sources/governance/upgrade_contract.move create mode 100644 sui/token_bridge/sources/messages/asset_meta.move create mode 100644 sui/token_bridge/sources/messages/transfer.move create mode 100644 sui/token_bridge/sources/messages/transfer_with_payload.move create mode 100644 sui/token_bridge/sources/migrate.move delete mode 100644 sui/token_bridge/sources/newtypes/normalized_amount.move delete mode 100644 sui/token_bridge/sources/newtypes/string32.move delete mode 100644 sui/token_bridge/sources/register_chain.move create mode 100644 sui/token_bridge/sources/resources/native_asset.move create mode 100644 sui/token_bridge/sources/resources/token_registry.move create mode 100644 sui/token_bridge/sources/resources/wrapped_asset.move create mode 100644 sui/token_bridge/sources/setup.move create mode 100644 sui/token_bridge/sources/state.move delete mode 100644 sui/token_bridge/sources/structs/asset_meta.move delete mode 100644 sui/token_bridge/sources/structs/transfer.move delete mode 100644 sui/token_bridge/sources/structs/transfer_result.move delete mode 100644 sui/token_bridge/sources/structs/transfer_with_payload.move create mode 100644 sui/token_bridge/sources/test/coin_native_10.move create mode 100644 sui/token_bridge/sources/test/coin_native_4.move create mode 100644 sui/token_bridge/sources/test/coin_wrapped_12.move create mode 100644 sui/token_bridge/sources/test/coin_wrapped_7.move create mode 100644 sui/token_bridge/sources/test/dummy_message.move create mode 100644 sui/token_bridge/sources/test/token_bridge_scenario.move delete mode 100644 sui/token_bridge/sources/testing/native_coin.move delete mode 100644 sui/token_bridge/sources/testing/native_coin_v2.move delete mode 100644 sui/token_bridge/sources/testing/wrapped_coin.move create mode 100644 sui/token_bridge/sources/transfer_tokens_with_payload.move create mode 100644 sui/token_bridge/sources/utils/coin_utils.move create mode 100644 sui/token_bridge/sources/utils/string_utils.move create mode 100644 sui/token_bridge/sources/version_control.move delete mode 100644 sui/token_bridge/sources/wrapped.move create mode 100644 sui/wormhole/.gitignore create mode 100644 sui/wormhole/Move.devnet.toml create mode 100644 sui/wormhole/Move.lock create mode 100644 sui/wormhole/Move.testnet.toml delete mode 100644 sui/wormhole/sources/cursor.move create mode 100644 sui/wormhole/sources/datatypes/bytes20.move create mode 100644 sui/wormhole/sources/datatypes/bytes32.move create mode 100644 sui/wormhole/sources/datatypes/external_address.move create mode 100644 sui/wormhole/sources/datatypes/guardian_signature.move delete mode 100644 sui/wormhole/sources/deserialize.move delete mode 100644 sui/wormhole/sources/external_address.move create mode 100644 sui/wormhole/sources/governance/set_fee.move create mode 100644 sui/wormhole/sources/governance/transfer_fee.move create mode 100644 sui/wormhole/sources/governance/update_guardian_set.move create mode 100644 sui/wormhole/sources/governance/upgrade_contract.move create mode 100644 sui/wormhole/sources/governance_message.move delete mode 100644 sui/wormhole/sources/guardian_pubkey.move delete mode 100644 sui/wormhole/sources/guardian_set_upgrade.move delete mode 100644 sui/wormhole/sources/keccack256.move create mode 100644 sui/wormhole/sources/migrate.move delete mode 100644 sui/wormhole/sources/myu16.move delete mode 100644 sui/wormhole/sources/myu256.move delete mode 100644 sui/wormhole/sources/myu32.move delete mode 100644 sui/wormhole/sources/myvaa.move create mode 100644 sui/wormhole/sources/publish_message.move create mode 100644 sui/wormhole/sources/resources/consumed_vaas.move create mode 100644 sui/wormhole/sources/resources/fee_collector.move create mode 100644 sui/wormhole/sources/resources/guardian.move create mode 100644 sui/wormhole/sources/resources/guardian_set.move create mode 100644 sui/wormhole/sources/resources/set.move delete mode 100644 sui/wormhole/sources/serialize.move delete mode 100644 sui/wormhole/sources/set.move create mode 100644 sui/wormhole/sources/setup.move delete mode 100644 sui/wormhole/sources/structs.move create mode 100644 sui/wormhole/sources/test/wormhole_scenario.move create mode 100644 sui/wormhole/sources/utils/bytes.move create mode 100644 sui/wormhole/sources/utils/cursor.move create mode 100644 sui/wormhole/sources/utils/package_utils.move create mode 100644 sui/wormhole/sources/vaa.move create mode 100644 sui/wormhole/sources/version_control.move delete mode 100644 sui/wormhole/sources/wormhole.move diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 79bf0d2e1..a623261ad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -207,16 +207,12 @@ jobs: sui: name: Sui runs-on: ubuntu-20.04 - defaults: - run: - shell: bash - working-directory: ./sui steps: - name: Checkout repository uses: actions/checkout@v2 - name: Run tests via docker - run: make test-docker + run: cd sui && make test-docker terra: runs-on: ubuntu-20.04 diff --git a/.gitignore b/.gitignore index b8e28da48..e22024f31 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,5 @@ bigtable-writer.json /solana/artifacts-mainnet/ /ethereum/out/ /ethereum/cache/ +sui.log.* +sui/examples/wrapped_coin diff --git a/Dockerfile.const b/Dockerfile.const index 1cfad2640..7f3d7e7cf 100644 --- a/Dockerfile.const +++ b/Dockerfile.const @@ -47,6 +47,7 @@ COPY --from=const-build /scripts/.env.hex terra/tools/.env COPY --from=const-build /scripts/.env.hex cosmwasm/deployment/terra2/tools/.env COPY --from=const-build /scripts/.env.hex algorand/.env COPY --from=const-build /scripts/.env.hex near/.env +COPY --from=const-build /scripts/.env.hex sui/.env COPY --from=const-build /scripts/.env.hex aptos/.env COPY --from=const-build /scripts/.env.hex wormchain/contracts/tools/.env diff --git a/sui/.gitignore b/sui/.gitignore index f2ca2e862..6ddb4b0ac 100644 --- a/sui/.gitignore +++ b/sui/.gitignore @@ -1,2 +1,2 @@ -env.sh +deploy.out sui.log.* diff --git a/sui/Docker.md b/sui/Docker.md old mode 100644 new mode 100755 index 414901556..f6ff7cd7c --- a/sui/Docker.md +++ b/sui/Docker.md @@ -1,8 +1,13 @@ # first build the image -(cd ..; DOCKER_BUILDKIT=1 docker build --progress plain -f sui/Dockerfile.base -t sui .) + +cd ..; DOCKER_BUILDKIT=1 docker build --no-cache --progress plain -f sui/Dockerfile.base -t sui . + # tag the image with the appropriate version -docker tag sui:latest ghcr.io/wormhole-foundation/sui:0.15.0 + +docker tag sui:latest ghcr.io/wormhole-foundation/sui:1.0.0-testnet + # push to ghcr -docker push ghcr.io/wormhole-foundation/sui:0.15.0 + +docker push ghcr.io/wormhole-foundation/sui:1.0.0-testnet echo remember to update both Dockerfile and Dockerfile.export diff --git a/sui/Dockerfile b/sui/Dockerfile index 2ab9d2560..4fad4cfa2 100644 --- a/sui/Dockerfile +++ b/sui/Dockerfile @@ -1,25 +1,33 @@ -FROM ghcr.io/wormhole-foundation/sui:0.21.1@sha256:59b91529e426b44c152b40ad0e7a6a7aafc8225722b5d7e331056a4d65845015 as sui +FROM ghcr.io/wormhole-foundation/sui:1.0.0-testnet@sha256:63a8094590ddb90320aa1c86414f17cc73c759ecbdfaf2fe78f135b7c08ec536 as sui -RUN dnf -y install make git +RUN dnf -y install make git npm -COPY README.md cert.pem* /certs/ +COPY sui/README.md sui/cert.pem* /certs/ RUN if [ -e /certs/cert.pem ]; then cp /certs/cert.pem /etc/ssl/certs/ca-certificates.crt; fi RUN if [ -e /certs/cert.pem ]; then git config --global http.sslCAInfo /certs/cert.pem; fi +RUN sui genesis -f + +COPY sui/devnet/ /root/.sui/sui_config/ + +# Build CLI, TODO(aki): move this to base image before merging into main +RUN npm install -g n typescript ts-node +RUN n stable +COPY clients/js /tmp/clients/js +WORKDIR /tmp/clients/js +RUN make install + WORKDIR /tmp -RUN sui genesis -f -COPY scripts/start_node.sh . -COPY scripts/funder.sh . - -COPY wormhole/ wormhole -COPY token_bridge/ token_bridge -# COPY examples/ examples -COPY Makefile Makefile +COPY sui/scripts/ scripts +COPY sui/wormhole/ wormhole +COPY sui/token_bridge/ token_bridge +COPY sui/examples/ examples +COPY sui/Makefile Makefile +COPY sui/.env* . FROM sui AS tests WORKDIR /tmp -RUN --mount=type=cache,target=/root/.move,id=move_cache \ - make test +RUN --mount=type=cache,target=/root/.move,id=move_cache make test diff --git a/sui/Dockerfile.base b/sui/Dockerfile.base index febda65a2..447b61c03 100644 --- a/sui/Dockerfile.base +++ b/sui/Dockerfile.base @@ -13,10 +13,11 @@ COPY sui/scripts/node_builder.sh /tmp RUN /tmp/node_builder.sh -WORKDIR /tmp - FROM docker.io/redhat/ubi8@sha256:56c374376a42da40f3aec753c4eab029b5ea162d70cb5f0cda24758780c31d81 as export-stage +RUN dnf -y update +RUN dnf -y install jq curl git + COPY --from=sui-node /root/.cargo/bin/sui /bin/sui COPY --from=sui-node /root/.cargo/bin/sui-faucet /bin/sui-faucet COPY --from=sui-node /root/.cargo/bin/sui-node /bin/sui-node diff --git a/sui/Makefile b/sui/Makefile index 07ce384d8..6c3f2318e 100644 --- a/sui/Makefile +++ b/sui/Makefile @@ -1,13 +1,13 @@ -CONTRACT_DIRS := wormhole token_bridge +TEST_CONTRACT_DIRS := wormhole token_bridge examples/coins examples/core_messages +CLEAN_CONTRACT_DIRS := wormhole token_bridge examples/coins examples/core_messages -TARGETS := build test +.PHONY: clean +clean: + $(foreach dir,$(TEST_CONTRACT_DIRS), make -C $(dir) $@ &&) true -.PHONY: $(TARGETS) -$(TARGETS): - $(foreach dir,$(CONTRACT_DIRS), make -C $(dir) $@ &&) true +.PHONY: test +test: + $(foreach dir,$(TEST_CONTRACT_DIRS), make -C $(dir) $@ &&) true test-docker: - DOCKER_BUILDKIT=1 docker build -f Dockerfile --target tests . - -sui_export: - DOCKER_BUILDKIT=1 docker build --progress plain -f Dockerfile.export -t near-export -o type=local,dest=$$HOME/.cargo/bin . + DOCKER_BUILDKIT=1 docker build -f Dockerfile .. diff --git a/sui/NOTES.md b/sui/NOTES.md index 671ce4351..5677cfb92 100644 --- a/sui/NOTES.md +++ b/sui/NOTES.md @@ -110,3 +110,5 @@ Digest: cL+uWFEVcQrkAiOxOJmaK7JmlOJdE3/8X5JFbJwBxCQ= kubectl exec -it guardian-0 -- /guardiand admin send-observation-request --socket /tmp/admin.sock 21 70bfae585115710ae40223b138999a2bb26694e25d137ffc5f92456c9c01c424 // curl -s -X POST -d '{"jsonrpc":"2.0", "id": 1, "method": "sui_getCommitteeInfo", "params": []}' -H 'Content-Type: application/json' http://127.0.0.1:9002 | jq + +// curl -s -X POST -d '{"jsonrpc":"2.0", "id": 1, "method": "sui_getLatestCheckpointSequenceNumber", "params": []}' -H 'Content-Type: application/json' http://127.0.0.1:9000 diff --git a/sui/README.md b/sui/README.md index ed9281bb0..0d7161fd5 100644 --- a/sui/README.md +++ b/sui/README.md @@ -1,14 +1,137 @@ +# Wormhole on Sui + +This folder contains the reference implementation of the Wormhole cross-chain +messaging protocol smart contracts on the [Sui](https://mystenlabs.com/) +blockchain, implemented in the [Move](https://move-book.com/) programming +language. + +# Project structure + +The project is laid out as follows: + +- [wormhole](./wormhole) the core messaging layer +- [token_bridge](./token_bridge) the asset transfer layer +- [coin](./coin) a template for creating Wormhole wrapped coins + # Installation -Make sure your Cargo version is at least 1.64.0 and then follow the steps below: + +Make sure your Cargo version is at least 1.65.0 and then follow the steps below: + - https://docs.sui.io/build/install +## Prerequisites -# Sui CLI -- do `sui start` to spin up a local network -- do `rpc-server` to start a server for handling rpc calls -- do `sui-faucet` to start a faucet for requesting funds from active-address +Install the `Sui` CLI. This tool is used to compile the contracts and run the tests. -# TODOs -- The move dependencies are currently pinned to a version that matches the - docker image for reproducibility. These should be regularly updated to track - any upstream changes before the mainnet release. +```sh +cargo install --locked --git https://github.com/MystenLabs/sui.git --rev 09b2081498366df936abae26eea4b2d5cafb2788 sui sui-faucet +``` + +Some useful Sui CLI commands are + +- `sui start` to spin up a local network +- `rpc-server` to start a server for handling rpc calls +- `sui-faucet` to start a faucet for requesting funds from active-address + +Next, install the [worm](../clients/js/README.md) CLI tool by running + +```sh +wormhole/clients/js $ make install +``` + +`worm` is the swiss army knife for interacting with wormhole contracts on all +supported chains, and generating signed messages (VAAs) for testing. + +As an optional, but recommended step, install the +[move-analyzer](https://github.com/move-language/move/tree/main/language/move-analyzer) +Language Server (LSP): + +```sh +cargo install --git https://github.com/move-language/move.git move-analyzer --branch main --features "address32" +``` + +This installs the LSP backend which is then supported by most popular editors such as [emacs](https://github.com/emacs-lsp/lsp-mode), [vim](https://github.com/neoclide/coc.nvim), and even [vscode](https://marketplace.visualstudio.com/items?itemName=move.move-analyzer). + +
+ For emacs, you may need to add the following to your config file: + +```lisp +;; Move +(define-derived-mode move-mode rust-mode "Move" + :group 'move-mode) + +(add-to-list 'auto-mode-alist '("\\.move\\'" . move-mode)) + +(with-eval-after-load 'lsp-mode + (add-to-list 'lsp-language-id-configuration + '(move-mode . "move")) + + (lsp-register-client + (make-lsp-client :new-connection (lsp-stdio-connection "move-analyzer") + :activation-fn (lsp-activate-on "move") + :server-id 'move-analyzer))) +``` + +
+ +## Building & running tests + +The project uses a simple `make`-based build system for building and running +tests. Running `make test` in this directory will run the tests for each +contract. If you only want to run the tests for, say, the token bridge contract, +then you can run `make test` in the `token_bridge` directory, or run `make -C +token_bridge test` from this directory. + +Additionally, `make test-docker` runs the tests in a docker container which is +set up with all the necessary dependencies. This is the command that runs in CI. + +## Running a local validator and deploying the contracts to it + +Simply run + +```sh +worm start-validator sui +``` + +which will start a local sui validator with an RPC endpoint at `0.0.0.0:9000` +and the faucet endpoint at `0.0.0.0:5003/gas`. Note that the faucet takes a few +(~10) seconds to come up, so only proceed when you see the following: + +```text +Faucet is running. Faucet endpoint: 0.0.0.0:5003/gas +``` + +Once the validator is running, the contracts are ready to deploy. In the +[scripts](./scripts) directory, run + +```sh +scripts $ ./deploy.sh devnet +``` + +This will deploy the core contract and the token bridge. + +When you make a change to the contract, you can simply restart the validator and +run the deploy script again. + + + +# Implementation notes / coding practices + +In this section, we describe some of the implementation design decisions and +coding practices we converged on along the way. Note that the coding guidelines +are prescriptive rather than descriptive, and the goal is for the contracts to +ultimately follow these, but they might not during earlier development phases. + +### TODO diff --git a/sui/coin/Move.toml b/sui/coin/Move.toml deleted file mode 100644 index 8baa4d506..000000000 --- a/sui/coin/Move.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "Coin" -version = "0.0.1" - -[dependencies] -Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework", rev = "2d709054a08d904b9229a2472af679f210af3827" } -TokenBridge = { local = "../token_bridge"} -Wormhole = { local = "../wormhole"} - -[addresses] -coin="0x0" diff --git a/sui/coin/sources/coin.move b/sui/coin/sources/coin.move deleted file mode 100644 index cb82eac2f..000000000 --- a/sui/coin/sources/coin.move +++ /dev/null @@ -1,24 +0,0 @@ -module coin::coin { - use sui::transfer; - use sui::tx_context::{Self, TxContext}; - - use token_bridge::wrapped; - - struct COIN has drop {} - - fun init(coin_witness: COIN, ctx: &mut TxContext) { - // Step 1. Paste token attestation VAA below. - let vaa_bytes = x"0100000000010080366065746148420220f25a6275097370e8db40984529a6676b7a5fc9feb11755ec49ca626b858ddfde88d15601f85ab7683c5f161413b0412143241c700aff010000000100000001000200000000000000000000000000000000000000000000000000000000deadbeef000000000150eb23000200000000000000000000000000000000000000000000000000000000beefface00020c424545460000000000000000000000000000000000000000000000000000000042656566206661636520546f6b656e0000000000000000000000000000000000"; - - let new_wrapped_coin = wrapped::create_wrapped_coin(vaa_bytes, coin_witness, ctx); - transfer::transfer( - new_wrapped_coin, - tx_context::sender(ctx) - ); - } - - #[test_only] - public fun test_init(ctx: &mut TxContext) { - init(COIN {}, ctx) - } -} diff --git a/sui/devnet/client.yaml b/sui/devnet/client.yaml new file mode 100644 index 000000000..28fb28695 --- /dev/null +++ b/sui/devnet/client.yaml @@ -0,0 +1,12 @@ +--- +keystore: + File: /root/.sui/sui_config/sui.keystore +envs: + - alias: localnet + rpc: "http://0.0.0.0:9000" + ws: ~ + - alias: devnet + rpc: "https://fullnode.devnet.sui.io:443" + ws: ~ +active_env: localnet +active_address: "0xed867315e3f7c83ae82e6d5858b6a6cc57c291fd84f7509646ebc8162169cf96" diff --git a/sui/devnet/fullnode.yaml b/sui/devnet/fullnode.yaml new file mode 100644 index 000000000..f29f7d442 --- /dev/null +++ b/sui/devnet/fullnode.yaml @@ -0,0 +1,45 @@ +--- +protocol-key-pair: + value: U/JD+ELChkDDYiw/jq+I1RVJAUE8Kcu8FiQBSDVM7Aw= +worker-key-pair: + value: AAw8S7FtL0j0VTRKWNrL/GJCB8BwJOA6I2N0OGW6QlG8 +account-key-pair: + value: AFyoDGvHw/O4uSwf+qXg96bbRan1T0v6Zmnv+P8brtGE +network-key-pair: + value: AH8ybx8kJxx1VDebF9aJv2pQQqWoDM9tnkHnPUo5EFwS +db-path: /root/.sui/sui_config/authorities_db/full_node_db +network-address: /ip4/127.0.0.1/tcp/32889/http +json-rpc-address: "0.0.0.0:9000" +metrics-address: "127.0.0.1:43249" +admin-interface-port: 36887 +enable-event-processing: true +grpc-load-shed: ~ +grpc-concurrency-limit: ~ +p2p-config: + listen-address: "127.0.0.1:34131" + external-address: /ip4/127.0.0.1/udp/34131 + seed-peers: + - peer-id: 68f5be330e0db85dccbdc36d4e1c59dd2828a27365db26a75198c8a54335b1de + address: /ip4/127.0.0.1/udp/33745 + - peer-id: 0b75d3508725b9d260995e7081e9ff3639d7c7d858f8d2379cc9c9f39d8dfc8a + address: /ip4/127.0.0.1/udp/40075 + - peer-id: 6447bdd9b1bf65a16036950d7ba7a495247ecb291c55b113ed3e76d0543196d9 + address: /ip4/127.0.0.1/udp/39953 + - peer-id: f454efea06dadd727a682d0b08d55f2df32b83e364a0b75270aaf9c247f0ed6f + address: /ip4/127.0.0.1/udp/35253 +genesis: + genesis-file-location: /root/.sui/sui_config/genesis.blob +authority-store-pruning-config: + num-latest-epoch-dbs-to-retain: 3 + epoch-db-pruning-period-secs: 3600 + num-epochs-to-retain: 1 + max-checkpoints-in-batch: 200 + max-transactions-in-batch: 1000 + use-range-deletion: true +end-of-epoch-broadcast-channel-capacity: 128 +checkpoint-executor-config: + checkpoint-execution-max-concurrency: 200 + local-execution-timeout-sec: 10 +db-checkpoint-config: + perform-db-checkpoints-at-epoch-end: false +indirect-objects-threshold: 18446744073709551615 diff --git a/sui/devnet/genesis.blob b/sui/devnet/genesis.blob new file mode 100644 index 0000000000000000000000000000000000000000..7afaa87838fecdd607849d0fde16522a35a438a3 GIT binary patch literal 202349 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%0DCu12!BTUST3 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