From e0002c571527e387fdb3609bf8a6f59a91dc6f65 Mon Sep 17 00:00:00 2001 From: filip Date: Wed, 16 Nov 2022 12:56:05 +0100 Subject: [PATCH 1/6] deploy wrapped A0 --- contracts/scripts/clean.sh | 5 ++++- contracts/scripts/deploy.sh | 41 +++++++++++++++++++++++++++++++--- contracts/wrapped_azero/lib.rs | 8 +++---- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/contracts/scripts/clean.sh b/contracts/scripts/clean.sh index 51193a5677..5253f0f390 100755 --- a/contracts/scripts/clean.sh +++ b/contracts/scripts/clean.sh @@ -54,7 +54,6 @@ function remove_contract_code { rm -f $tmp_output_file set -e - fi } @@ -93,6 +92,10 @@ terminate_contract simple_dex simple_dex remove_contract_code simple_dex_code_hash echo "succesfully terminated and removed simple_dex" +terminate_contract wrapped_azero wrapped_azero +remove_contract_code wrapped_azero_code_hash +echo "succesfully terminated and removed wrapped_azero" + # remove access control as last terminate_contract access_control access_control remove_contract_code access_control_code_hash diff --git a/contracts/scripts/deploy.sh b/contracts/scripts/deploy.sh index ef8b046726..92d07083fb 100755 --- a/contracts/scripts/deploy.sh +++ b/contracts/scripts/deploy.sh @@ -63,7 +63,6 @@ function deploy_ticket_token { eval $__resultvar="'$contract_address'" } - function deploy_game_token { local __resultvar=$1 @@ -90,7 +89,6 @@ function deploy_game_token { eval "$__resultvar='$contract_address'" } - function deploy_button_game { local __resultvar=$1 @@ -183,6 +181,28 @@ function deploy_simple_dex { eval "$__resultvar='$contract_address'" } +function deploy_wrapped_azero { + local __resultvar=$1 + + # --- CREATE AN INSTANCE OF THE CONTRACT + + cd "$CONTRACTS_PATH"/wrapped_azero + + local contract_address + contract_address=$(cargo contract instantiate --url "$NODE" --constructor new --suri "$AUTHORITY_SEED" --skip-confirm) + contract_address=$(echo "$contract_address" | grep Contract | tail -1 | cut -c 14-) + + echo "wrapped Azero contract instance address: $contract_address" + + # --- GRANT PRIVILEGES ON THE CONTRACT + + cd "$CONTRACTS_PATH"/access_control + + cargo contract call --url "$NODE" --contract "$ACCESS_CONTROL" --message grant_role --args "$AUTHORITY" 'Owner('"$contract_address"')' --suri "$AUTHORITY_SEED" --skip-confirm + + eval "$__resultvar='$contract_address'" +} + function link_bytecode() { local contract=$1 local placeholder=$2 @@ -217,6 +237,9 @@ cargo contract build --release cd "$CONTRACTS_PATH"/simple_dex cargo contract build --release +cd "$CONTRACTS_PATH"/wrapped_azero +cargo contract build --release + # --- DEPLOY ACCESS CONTROL CONTRACT cd "$CONTRACTS_PATH"/access_control @@ -237,6 +260,7 @@ upload_contract GAME_TOKEN_CODE_HASH game_token upload_contract BUTTON_CODE_HASH button upload_contract MARKETPLACE_CODE_HASH marketplace upload_contract SIMPLE_DEX_CODE_HASH simple_dex +upload_contract WRAPPED_AZERO_CODE_HASH wrapped_azero start=$(date +%s.%N) @@ -273,9 +297,16 @@ deploy_game_token THE_PRESSIAH_COMETH_TOKEN Lono LON $salt deploy_marketplace THE_PRESSIAH_COMETH_MARKETPLACE "$MARKETPLACE_CODE_HASH" the_pressiah_cometh "$salt" "$THE_PRESSIAH_COMETH_TICKET" "$THE_PRESSIAH_COMETH_TOKEN" deploy_button_game THE_PRESSIAH_COMETH ThePressiahCometh "$THE_PRESSIAH_COMETH_TICKET" "$THE_PRESSIAH_COMETH_TOKEN" "$THE_PRESSIAH_COMETH_MARKETPLACE" "$salt" +# --- DEPLOY DEX CONTRACT + echo "Simple Dex" deploy_simple_dex SIMPLE_DEX +# --- DEPLOY WRAPPED AZERO CONTRACT + +echo "Wrapped Azero" +deploy_wrapped_azero WRAPPED_AZERO + # spit adresses to a JSON file cd "$CONTRACTS_PATH" @@ -299,6 +330,8 @@ jq -n --arg early_bird_special "$EARLY_BIRD_SPECIAL" \ --arg access_control_code_hash "$ACCESS_CONTROL_CODE_HASH" \ --arg simple_dex "$SIMPLE_DEX" \ --arg simple_dex_code_hash "$SIMPLE_DEX_CODE_HASH" \ + --arg wrapped_azero "$WRAPPED_AZERO" \ + --arg wrapped_azero_code_hash "$WRAPPED_AZERO_CODE_HASH" \ '{ early_bird_special: $early_bird_special, early_bird_special_marketplace: $early_bird_special_marketplace, @@ -319,7 +352,9 @@ jq -n --arg early_bird_special "$EARLY_BIRD_SPECIAL" \ game_token_code_hash: $game_token_code_hash, marketplace_code_hash: $marketplace_code_hash, access_control_code_hash: $access_control_code_hash, - simple_dex_code_hash: $simple_dex_code_hash + simple_dex_code_hash: $simple_dex_code_hash, + wrapped_azero: $wrapped_azero, + wrapped_azero_code_hash: $wrapped_azero_code_hash }' > addresses.json end=`date +%s.%N` diff --git a/contracts/wrapped_azero/lib.rs b/contracts/wrapped_azero/lib.rs index 22353ec074..b0f5d5005c 100644 --- a/contracts/wrapped_azero/lib.rs +++ b/contracts/wrapped_azero/lib.rs @@ -14,7 +14,7 @@ pub mod wrapped_azero { codegen::{EmitEvent, Env}, reflect::ContractEventBase, }; - use ink_prelude::{format, string::String}; + use ink_prelude::format; use ink_storage::traits::SpreadAllocate; use num_traits::identities::Zero; use openbrush::{ @@ -127,7 +127,7 @@ pub mod wrapped_azero { /// /// Will revert if called from an account without a proper role #[ink(constructor)] - pub fn new(name: String, symbol: String) -> Self { + pub fn new() -> Self { let caller = Self::env().caller(); let code_hash = Self::env() .own_code_hash() @@ -143,8 +143,8 @@ pub mod wrapped_azero { match role_check { Ok(_) => ink_lang::codegen::initialize_contract(|instance: &mut WrappedAzero| { - instance.metadata.name = Some(name.into()); - instance.metadata.symbol = Some(symbol.into()); + instance.metadata.name = Some("wAzero".into()); + instance.metadata.symbol = Some("wA0".into()); instance.metadata.decimals = 12; // same as AZERO instance.access_control = AccountId::from(ACCESS_CONTROL_PUBKEY); From b8abf70ea57daccc3f4ca2ae26a8da5b295e9213 Mon Sep 17 00:00:00 2001 From: filip Date: Wed, 16 Nov 2022 13:15:20 +0100 Subject: [PATCH 2/6] edit workflow --- .../contracts-e2e-tests-and-deploy.yaml | 75 +++++++++++-------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/.github/workflows/contracts-e2e-tests-and-deploy.yaml b/.github/workflows/contracts-e2e-tests-and-deploy.yaml index 71c35fcbb3..a9014f207d 100644 --- a/.github/workflows/contracts-e2e-tests-and-deploy.yaml +++ b/.github/workflows/contracts-e2e-tests-and-deploy.yaml @@ -1,10 +1,11 @@ name: contracts-e2e-tests-and-deploy on: - pull_request: - paths: - - 'contracts/**' - - '.github/**' + # TODO : temporary, uncomment before merging + # pull_request: + # paths: + # - 'contracts/**' + # - '.github/**' push: paths: - 'contracts/**' @@ -15,7 +16,7 @@ concurrency: cancel-in-progress: false env: - CHECKOUT_BRANCH: benjamin + # CHECKOUT_BRANCH: benjamin CACHE_KEY: fe-benjamin-button CONTRACTS_ENVFILE: fe-benjamin CARGOCONTRACT_REV: 2b1758756de59bd81e7bed5f8429d364f281cb9a @@ -70,11 +71,12 @@ jobs: contracts/ticket_token/target/ contracts/wrapped_azero/target/ + # TODO : this should NOT be built every time - name: Install cargo-contract run: | cargo install cargo-dylint dylint-link --force # revision merging Hans's PR changes [fix for node URL parsing ] - cargo install --git https://github.com/paritytech/cargo-contract.git --rev 2b1758756de59bd81e7bed5f8429d364f281cb9a --force + cargo install --git https://github.com/paritytech/cargo-contract.git --rev ${{ env.CARGOCONTRACT_REV }} --force - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 @@ -136,14 +138,15 @@ jobs: build_and_deploy_contracts: name: Deploy contracts on feature environment - if: ${{ (github.event_name == 'push') && (github.ref == 'refs/heads/benjamin') }} + # TODO : temporary, uncomment before merging + # if: ${{ (github.event_name == 'push') && (github.ref == 'refs/heads/benjamin') }} needs: [run-tests] runs-on: ubuntu-20.04 steps: - name: Checkout repo uses: actions/checkout@v2.3.4 - with: - ref: ${{ env.CHECKOUT_BRANCH }} + # with: + # ref: ${{ env.CHECKOUT_BRANCH }} - name: Check if environment is reachable shell: bash @@ -188,13 +191,22 @@ jobs: with: target-key: ${{ env.CACHE_KEY }} cargo-key: ${{ env.CACHE_KEY }} - cache-version: v1 + cache-version: v2 + cargo-targets: | + contracts/access_control/target/ + contracts/button/target/ + contracts/game_token/target/ + contracts/marketplace/target/ + contracts/simple_dex/target/ + contracts/ticket_token/target/ + contracts/wrapped_azero/target/ - name: Install cargo additional libs run: | . "$HOME/.cargo/env" cargo install dylint-link cargo-dylint + # TODO : this should NOT be built every time - name: Install cargo-contract with bug fixes around URL parsing run: | . "$HOME/.cargo/env" @@ -211,20 +223,20 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_DEVNET_SECRET_ACCESS_KEY }} aws-region: ${{ env.AWS_REGION }} - - name: Get contracts' target directories cache from S3 bucket - shell: bash - continue-on-error: true - run: | - aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/targets.tgz targets.tgz - tar -xzf targets.tgz + # - name: Get contracts' target directories cache from S3 bucket + # shell: bash + # continue-on-error: true + # run: | + # aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/targets.tgz targets.tgz + # tar -xzf targets.tgz - name: Copy metadata.json and addresses.json files from S3 bucket shell: bash run: | aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/addresses.json contracts/addresses.json - for i in ticket_token marketplace button game_token simple_dex access_control; do \ + for i in ticket_token marketplace button game_token simple_dex wrapped_azero access_control; do \ mkdir -p contracts/"$i"/target/ink - aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/"$i"/metadata.json contracts/"$i"/target/ink/metadata.json; \ + aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/"$i"/metadata.json contracts/"$i"/target/ink/metadata.json; \ || true done - name: Run clean.sh script @@ -244,11 +256,14 @@ jobs: shell: bash run: | aws s3 cp contracts/addresses.json s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/addresses.json - for i in ticket_token marketplace button game_token simple_dex access_control; do \ + for i in ticket_token marketplace button game_token simple_dex wrapped_azero access_control; do \ aws s3 cp contracts/"$i"/target/ink/metadata.json s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/"$i"/metadata.json; \ done + echo -n "${{ steps.get_branch.outputs.sha_short }}" > commit_sha.txt + aws s3 cp commit_sha.txt s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/commit_sha.txt + source contracts/env/${{ env.CONTRACTS_ENVFILE }} && echo -n "$NODE" > env_NODE.txt aws s3 cp env_NODE.txt s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/env_NODE.txt @@ -256,7 +271,7 @@ jobs: shell: bash run: | cp contracts/addresses.json addresses.${{ env.CONTRACTS_ENVFILE }}.json - for i in ticket_token marketplace button game_token access_control; do \ + for i in ticket_token marketplace button game_token wrapped_azero access_control; do \ cp contracts/"$i"/target/ink/metadata.json metadata_"$i".${{ env.CONTRACTS_ENVFILE }}.json; \ done @@ -276,16 +291,16 @@ jobs: if-no-files-found: error retention-days: 90 - - name: Cache contracts' target directories in S3 bucket - shell: bash - run: | - tar -czf targets.tgz contracts/ticket_token/target \ - contracts/marketplace/target \ - contracts/button/target \ - contracts/game_token/target \ - contracts/simple_dex/target \ - contracts/access_control/target - aws s3 cp targets.tgz s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/targets.tgz + # - name: Cache contracts' target directories in S3 bucket + # shell: bash + # run: | + # tar -czf targets.tgz contracts/ticket_token/target \ + # contracts/marketplace/target \ + # contracts/button/target \ + # contracts/game_token/target \ + # contracts/simple_dex/target \ + # contracts/access_control/target + # aws s3 cp targets.tgz s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/targets.tgz - name: Trigger Indexer deployment workflow run: | From 730865eb2b026a6c605e14d146b3cd6c0265073e Mon Sep 17 00:00:00 2001 From: filip Date: Wed, 16 Nov 2022 13:16:12 +0100 Subject: [PATCH 3/6] add cleanup step --- .github/workflows/contracts-e2e-tests-and-deploy.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/contracts-e2e-tests-and-deploy.yaml b/.github/workflows/contracts-e2e-tests-and-deploy.yaml index a9014f207d..cbdabd1203 100644 --- a/.github/workflows/contracts-e2e-tests-and-deploy.yaml +++ b/.github/workflows/contracts-e2e-tests-and-deploy.yaml @@ -302,6 +302,9 @@ jobs: # contracts/access_control/target # aws s3 cp targets.tgz s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/targets.tgz + - name: Cleanup cache + uses: ./.github/actions/post-cache + - name: Trigger Indexer deployment workflow run: | curl -X POST 'https://api.github.com/repos/Cardinal-Cryptography/indexer/actions/workflows/build-and-deploy-to-devnet.yml/dispatches' \ From 865d01f879a807753afe6d6e9c5f322e75751beb Mon Sep 17 00:00:00 2001 From: filip Date: Wed, 16 Nov 2022 14:18:52 +0100 Subject: [PATCH 4/6] no need --- .github/workflows/contracts-e2e-tests-and-deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/contracts-e2e-tests-and-deploy.yaml b/.github/workflows/contracts-e2e-tests-and-deploy.yaml index cbdabd1203..22ab893fd1 100644 --- a/.github/workflows/contracts-e2e-tests-and-deploy.yaml +++ b/.github/workflows/contracts-e2e-tests-and-deploy.yaml @@ -140,7 +140,7 @@ jobs: name: Deploy contracts on feature environment # TODO : temporary, uncomment before merging # if: ${{ (github.event_name == 'push') && (github.ref == 'refs/heads/benjamin') }} - needs: [run-tests] + # needs: [run-tests] runs-on: ubuntu-20.04 steps: - name: Checkout repo From 61b72c68afe839f2cf1f1ee4655b647be1dd2a87 Mon Sep 17 00:00:00 2001 From: filip Date: Wed, 16 Nov 2022 14:39:08 +0100 Subject: [PATCH 5/6] just continue --- .github/workflows/contracts-e2e-tests-and-deploy.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/contracts-e2e-tests-and-deploy.yaml b/.github/workflows/contracts-e2e-tests-and-deploy.yaml index 22ab893fd1..ca82707d96 100644 --- a/.github/workflows/contracts-e2e-tests-and-deploy.yaml +++ b/.github/workflows/contracts-e2e-tests-and-deploy.yaml @@ -231,12 +231,13 @@ jobs: # tar -xzf targets.tgz - name: Copy metadata.json and addresses.json files from S3 bucket + continue-on-error: true shell: bash run: | aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/addresses.json contracts/addresses.json for i in ticket_token marketplace button game_token simple_dex wrapped_azero access_control; do \ mkdir -p contracts/"$i"/target/ink - aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/"$i"/metadata.json contracts/"$i"/target/ink/metadata.json; \ || true + aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/"$i"/metadata.json contracts/"$i"/target/ink/metadata.json; \ done - name: Run clean.sh script From 73cd70af207b08a8ec44f141a1d2fedc9f01dcf6 Mon Sep 17 00:00:00 2001 From: filip Date: Wed, 16 Nov 2022 15:31:16 +0100 Subject: [PATCH 6/6] cleanup --- .../contracts-e2e-tests-and-deploy.yaml | 38 ++++--------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/.github/workflows/contracts-e2e-tests-and-deploy.yaml b/.github/workflows/contracts-e2e-tests-and-deploy.yaml index ca82707d96..e6d817ad16 100644 --- a/.github/workflows/contracts-e2e-tests-and-deploy.yaml +++ b/.github/workflows/contracts-e2e-tests-and-deploy.yaml @@ -1,11 +1,10 @@ name: contracts-e2e-tests-and-deploy on: - # TODO : temporary, uncomment before merging - # pull_request: - # paths: - # - 'contracts/**' - # - '.github/**' + pull_request: + paths: + - 'contracts/**' + - '.github/**' push: paths: - 'contracts/**' @@ -16,7 +15,6 @@ concurrency: cancel-in-progress: false env: - # CHECKOUT_BRANCH: benjamin CACHE_KEY: fe-benjamin-button CONTRACTS_ENVFILE: fe-benjamin CARGOCONTRACT_REV: 2b1758756de59bd81e7bed5f8429d364f281cb9a @@ -138,15 +136,12 @@ jobs: build_and_deploy_contracts: name: Deploy contracts on feature environment - # TODO : temporary, uncomment before merging - # if: ${{ (github.event_name == 'push') && (github.ref == 'refs/heads/benjamin') }} - # needs: [run-tests] + if: ${{ (github.event_name == 'push') && (github.ref == 'refs/heads/benjamin') }} + needs: [run-tests] runs-on: ubuntu-20.04 steps: - name: Checkout repo uses: actions/checkout@v2.3.4 - # with: - # ref: ${{ env.CHECKOUT_BRANCH }} - name: Check if environment is reachable shell: bash @@ -223,13 +218,6 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_DEVNET_SECRET_ACCESS_KEY }} aws-region: ${{ env.AWS_REGION }} - # - name: Get contracts' target directories cache from S3 bucket - # shell: bash - # continue-on-error: true - # run: | - # aws s3 cp s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/targets.tgz targets.tgz - # tar -xzf targets.tgz - - name: Copy metadata.json and addresses.json files from S3 bucket continue-on-error: true shell: bash @@ -241,7 +229,6 @@ jobs: done - name: Run clean.sh script - continue-on-error: true shell: bash run: | . "$HOME/.cargo/env" @@ -292,17 +279,6 @@ jobs: if-no-files-found: error retention-days: 90 - # - name: Cache contracts' target directories in S3 bucket - # shell: bash - # run: | - # tar -czf targets.tgz contracts/ticket_token/target \ - # contracts/marketplace/target \ - # contracts/button/target \ - # contracts/game_token/target \ - # contracts/simple_dex/target \ - # contracts/access_control/target - # aws s3 cp targets.tgz s3://${{ secrets.CI_S3BUCKET_NAME }}/${{ env.S3BUCKET_PATH }}/targets.tgz - - name: Cleanup cache uses: ./.github/actions/post-cache @@ -319,3 +295,5 @@ jobs: -H "Accept: application/vnd.github+json" \ -H 'Authorization: Bearer ${{ secrets.CI_GH_TOKEN }}' \ -d '{ "ref":"main", "inputs": { "buildImage": "false", "deployImage": "true" }}' + + # TODO : Here the workflow should wait for a hook that notifies this workflow when the two prior steps have been finished succesfully