From 0bfafa007a5e6e0e7e76e6d12e20ad997418bc10 Mon Sep 17 00:00:00 2001 From: osslgtm <68947167+osslgtm@users.noreply.github.com> Date: Wed, 16 Aug 2023 16:45:25 +0800 Subject: [PATCH] Squashed commit of the following: commit f86cfcd10c38137a732bfeb6cab1ed4f76f74a18 Author: osslgtm <68947167+osslgtm@users.noreply.github.com> Date: Wed Aug 16 16:39:01 2023 +0800 fix: cleanup commit 041b827a5f5d15c7cc4ad6d5caa0dd067bbdb506 Author: osslgtm <68947167+osslgtm@users.noreply.github.com> Date: Wed Aug 16 16:38:21 2023 +0800 fix: cleanup commit 7d1cbb32ea18fd9b24bd80636617082868e6f2e0 Merge: f4ccf95 617acdb Author: osslgtm <68947167+osslgtm@users.noreply.github.com> Date: Wed Aug 16 16:22:45 2023 +0800 Merge branch 'master' into testing commit f4ccf955e4015ac0e9adb3a39a6cce64420d2937 Author: osslgtm <68947167+osslgtm@users.noreply.github.com> Date: Thu Aug 3 18:48:19 2023 +0800 fix: add secrets actions commit 22d43fbd56e855e87bec17d1bd1497ca90808c5e Author: osslgtm <68947167+osslgtm@users.noreply.github.com> Date: Thu Aug 3 18:47:41 2023 +0800 chore: refactor commit 0a0ccfe4062bd98e3421f9b43a8b4b676485a16c Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Tue Jul 11 19:02:22 2023 +0800 package-lock.json commit 1ccac2006d78b951ae8fae8e87b5b1a2381d96dc Merge: ef22664 7a29948 Author: PH <68947167+puayhiang@users.noreply.github.com> Date: Wed Jul 5 17:08:35 2023 +0800 Merge XDC Network Added XDC Network MainNet & TestNet in TradeTrust Ecosystem commit 7a2994828d73ef24bacc7c6bcf160d8d89e0c8dd Author: AnilChinchawale Date: Tue Jul 4 20:53:06 2023 +0530 update script network:xdcapothem:synpress commit 1c16dd0cfe408481167cf39c8c3f2fcbf4189944 Author: AnilChinchawale Date: Tue Jul 4 20:36:22 2023 +0530 Added temporary fix,due to issue in synpress lib. commit c8b85ca3ac62d76d235a6747de467f89cbf74447 Author: AnilChinchawale Date: Mon Jul 3 12:18:47 2023 +0530 Test has been created for XDC Apothem Network commit 7bc73e14fafbfd720fb42a7a95412b65c5c85e0c Author: AnilChinchawale Date: Mon Jul 3 12:16:17 2023 +0530 XDC Network added in Web UI commit ef226647a89ca070f6e53bfda1d1b7ef34080e57 Merge: aaa0d6e ea76c86 Author: PH <68947167+puayhiang@users.noreply.github.com> Date: Wed Jun 28 16:30:30 2023 +0800 chore: cleanup remove console.log commit ea76c8641a5f62836220f48a6b41afb44612741c Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Wed Jun 28 16:29:10 2023 +0800 chore: change network commit a3e69b1ecf09ed0fa3773d1e62a03e05ef583812 Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Wed Jun 28 16:28:35 2023 +0800 chore: cleanup commit aaa0d6e01a45dd4b828038777c45e2c28adb04d5 Merge: 7714292 f0dcf7b Author: PH <68947167+puayhiang@users.noreply.github.com> Date: Wed Jun 28 16:02:30 2023 +0800 chore: sync tradetrust/master chore: sync tradetrust/master commit f0dcf7bccf231094aabc03c43efdda1905cffbd2 Merge: 2462380 5125890 Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Wed Jun 28 16:00:08 2023 +0800 Merge remote-tracking branch 'fork/master' commit 77142929de43e91321a9a1a41be7bd745f73fe1d Merge: fcf597d 2462380 Author: PH <68947167+puayhiang@users.noreply.github.com> Date: Wed Jun 28 15:56:09 2023 +0800 feat: BC Checks Polygon BC Checks commit 24623801fa79b1dcea0b3e58cce16c8c5292c8bc Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Thu Jun 22 16:58:59 2023 +0800 fix: remove unused workflow commit b378c8fe090cf41fdc5b61066192682cdfc3c83e Merge: 2bc3683 29edc3a Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Thu Jun 22 16:55:57 2023 +0800 Merge remote-tracking branch 'fork/master' commit 2bc368351f4b78e01debb599060cf10f41cdff91 Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Wed Jun 21 16:27:52 2023 +0800 feat: write tests commit 6f5e6de9b154a4392b78797f4b2caa2261d3fe9c Merge: b3ad5bb dc737ad Author: PH <68947167+puayhiang@users.noreply.github.com> Date: Sat Jun 17 13:00:54 2023 +0800 Merge pull request #5 from TradeTrust/master Update master from tradetrust/tradetrust-website commit b3ad5bbc6b1f28b8e8bd86825decd58762ca89c5 Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Fri Jun 16 13:07:01 2023 +0800 update run freq commit a8dc349f72e9c56f5c491039e8c3069ff4357ad2 Merge: 5835318 674c2eb Author: PH <68947167+puayhiang@users.noreply.github.com> Date: Fri Jun 16 12:53:35 2023 +0800 Merge pull request #4 from TradeTrust/master Update master from tradetrust/tradetrust-website commit 583531897c1efd7e1c1511570032bfeab047c6bc Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Fri Jun 16 12:45:26 2023 +0800 test PAT commit c3e6c6a3c7e3ae270972ce063287686d45be5753 Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Thu Jun 15 00:29:55 2023 +0800 fix: set perm commit 6430c16ee3278df0123cd1ca231c6d479fb42f02 Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Thu Jun 15 00:19:11 2023 +0800 fix: rm auto approve commit a8c1043c5f6847e544adaf4106d00605be4bdf9c Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Thu Jun 15 00:05:55 2023 +0800 chore: enable auto approve commit c697290a96253aeb167b65dcf3d8c5512dd06b98 Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Wed Jun 14 23:58:55 2023 +0800 feat: auto sync commit a812e8528ad1b715d06961411fa860945cbfd17f Author: Puay Hiang <68947167+puayhiang@users.noreply.github.com> Date: Tue Jun 13 18:41:43 2023 +0800 feat: alt pipe --- .github/pull_request_template.md | 12 --- .github/workflows/lighthouse.yml | 34 ------- .github/workflows/lint_and_unit_test.yml | 26 ----- .github/workflows/sync.yml | 20 ++++ .github/workflows/synpress.yml | 30 ------ .github/workflows/testcafe.yml | 35 ------- .gitignore | 4 +- network-compose.yml | 31 ++++++ networks/.eslintrc.js | 6 ++ networks/docker/polygon.yml | 32 ++++++ networks/docker/xdcapothem.yml | 32 ++++++ networks/eslintrc.js | 6 ++ .../polygon/ebl-mumbai-surrendered.json | 76 ++++++++++++++ networks/fixtures/polygon/ebl-mumbai.json | 49 +++++++++ .../fixtures/reference/ebl-endorse-owner.json | 50 ++++++++++ .../reference/ebl-nominate-owner.json | 47 +++++++++ .../fixtures/reference/ebl-surrender.json | 47 +++++++++ .../reference/ebl-transfer-holder.json | 47 +++++++++ .../xdcapothem/ebl-apothem-surrendered.json | 76 ++++++++++++++ networks/fixtures/xdcapothem/ebl-apothem.json | 76 ++++++++++++++ networks/setup/polygon.mjs | 55 +++++++++++ networks/setup/utils/keys.mjs | 22 +++++ networks/setup/utils/template.mjs | 54 ++++++++++ networks/setup/xdcapothem.mjs | 63 ++++++++++++ networks/specs/polygon/0.setup.spec.js | 21 ++++ .../polygon/1.endorse-owner-holder.spec.js | 23 +++++ networks/specs/polygon/2.mumbai.spec.js | 48 +++++++++ .../specs/polygon/3.nominate-owner.spec.js | 56 +++++++++++ .../polygon/4.surrender-1-reject.spec.js | 33 +++++++ .../polygon/5.surrender-2-accept.spec.js | 32 ++++++ .../specs/polygon/6.transfer-holder.spec.js | 19 ++++ networks/specs/polygon/addresses.js | 4 + networks/specs/xdcapothem/addresses.js | 3 + .../xdcapothem/endorse-owner-holder.spec.js | 36 +++++++ .../specs/xdcapothem/nominate-owner.spec.js | 56 +++++++++++ .../xdcapothem/surrender-1-reject.spec.js | 34 +++++++ .../xdcapothem/surrender-2-accept.spec.js | 33 +++++++ .../specs/xdcapothem/transfer-holder.spec.js | 19 ++++ networks/specs/xdcapothem/xdcapothem.spec.js | 49 +++++++++ networks/support/commands.js | 17 ++++ networks/support/index.js | 2 + networks/synpress-runfile/keys.js | 22 +++++ networks/synpress-runfile/polygon.config.js | 70 +++++++++++++ networks/synpress.config.js | 79 +++++++++++++++ networks/tsconfig.json | 9 ++ package-lock.json | 99 ++++++++++++++++--- package.json | 9 +- .../DocumentStatus/StatusChecks.tsx | 6 +- 48 files changed, 1552 insertions(+), 157 deletions(-) delete mode 100644 .github/pull_request_template.md delete mode 100644 .github/workflows/lighthouse.yml delete mode 100644 .github/workflows/lint_and_unit_test.yml create mode 100644 .github/workflows/sync.yml delete mode 100644 .github/workflows/synpress.yml delete mode 100644 .github/workflows/testcafe.yml create mode 100644 network-compose.yml create mode 100644 networks/.eslintrc.js create mode 100644 networks/docker/polygon.yml create mode 100644 networks/docker/xdcapothem.yml create mode 100644 networks/eslintrc.js create mode 100644 networks/fixtures/polygon/ebl-mumbai-surrendered.json create mode 100644 networks/fixtures/polygon/ebl-mumbai.json create mode 100644 networks/fixtures/reference/ebl-endorse-owner.json create mode 100644 networks/fixtures/reference/ebl-nominate-owner.json create mode 100644 networks/fixtures/reference/ebl-surrender.json create mode 100644 networks/fixtures/reference/ebl-transfer-holder.json create mode 100644 networks/fixtures/xdcapothem/ebl-apothem-surrendered.json create mode 100644 networks/fixtures/xdcapothem/ebl-apothem.json create mode 100644 networks/setup/polygon.mjs create mode 100644 networks/setup/utils/keys.mjs create mode 100644 networks/setup/utils/template.mjs create mode 100644 networks/setup/xdcapothem.mjs create mode 100644 networks/specs/polygon/0.setup.spec.js create mode 100644 networks/specs/polygon/1.endorse-owner-holder.spec.js create mode 100644 networks/specs/polygon/2.mumbai.spec.js create mode 100644 networks/specs/polygon/3.nominate-owner.spec.js create mode 100644 networks/specs/polygon/4.surrender-1-reject.spec.js create mode 100644 networks/specs/polygon/5.surrender-2-accept.spec.js create mode 100644 networks/specs/polygon/6.transfer-holder.spec.js create mode 100644 networks/specs/polygon/addresses.js create mode 100644 networks/specs/xdcapothem/addresses.js create mode 100644 networks/specs/xdcapothem/endorse-owner-holder.spec.js create mode 100644 networks/specs/xdcapothem/nominate-owner.spec.js create mode 100644 networks/specs/xdcapothem/surrender-1-reject.spec.js create mode 100644 networks/specs/xdcapothem/surrender-2-accept.spec.js create mode 100644 networks/specs/xdcapothem/transfer-holder.spec.js create mode 100644 networks/specs/xdcapothem/xdcapothem.spec.js create mode 100644 networks/support/commands.js create mode 100644 networks/support/index.js create mode 100644 networks/synpress-runfile/keys.js create mode 100644 networks/synpress-runfile/polygon.config.js create mode 100644 networks/synpress.config.js create mode 100644 networks/tsconfig.json diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 33ccc7bda..000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,12 +0,0 @@ -## Summary - -What is the background of this pull request? - -## Changes - -- What are the changes made in this pull request? -- Change this and that, etc... - -## Issues - -What are the related issues or stories? diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml deleted file mode 100644 index e9a17d4da..000000000 --- a/.github/workflows/lighthouse.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Lighthouse - -on: - push: - branches: - - master - pull_request: - -jobs: - lhci: - if: ${{ !contains(github.event.head_commit.message, '[skip test]') }} - name: Lighthouse Desktop - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Use Node.js 16.x - uses: actions/setup-node@v3 - with: - node-version: 16.x - - name: npm install, build - run: | - npm install - npm run build - - name: run Lighthouse CI - run: | - npm install -g @lhci/cli@0.10.x - lhci autorun - - name: upload artifacts - if: failure() - uses: actions/upload-artifact@v3 - with: - name: Lighthouse reports - path: ${{ github.workspace }}/lighthouseReport - retention-days: 1 diff --git a/.github/workflows/lint_and_unit_test.yml b/.github/workflows/lint_and_unit_test.yml deleted file mode 100644 index 92d0e64ba..000000000 --- a/.github/workflows/lint_and_unit_test.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Test - -on: - push: - branches: - - master - pull_request: - -jobs: - test: - name: Lint & Test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: "14" - - name: Install Packages - run: npm ci - - name: Check Lint - run: npm run lint - - name: Test - if: ${{ !contains(github.event.head_commit.message, '[skip test]') }} - run: npm run test - - name: Build - run: npm run build:prod # this MUST be run to ensure production site will be built without errors diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml new file mode 100644 index 000000000..e05b76382 --- /dev/null +++ b/.github/workflows/sync.yml @@ -0,0 +1,20 @@ +name: Sync master with upstream + +on: + schedule: + - cron: '0 5 * * *' # every day at 5am + workflow_dispatch: # on button click + +jobs: + sync: + permissions: write-all + runs-on: ubuntu-latest + steps: + - uses: tgymnich/fork-sync@v1.8 + with: + owner: tradetrust + repo: tradetrust-website + base: master + head: master + pr_title: Update master from tradetrust/tradetrust-website + token: ${{ secrets.PAT }} \ No newline at end of file diff --git a/.github/workflows/synpress.yml b/.github/workflows/synpress.yml deleted file mode 100644 index 540aef9de..000000000 --- a/.github/workflows/synpress.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Synpress - -on: - push: - branches: - - master - pull_request: - -jobs: - synpress: - if: ${{ !contains(github.event.head_commit.message, '[skip test]') }} - # https://github.com/drptbl/synpress-setup-example/blob/1d980157ef343de54f786e1115e1da590f1ba1d1/.github/workflows/e2e.yml#L49-L102 - name: Synpress e2e Test - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v2 - - name: Set up QEMU - uses: docker/setup-qemu-action@8b122486cedac8393e77aa9734c3528886e4a1a8 # pin@v1 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # pin@v1 - - name: Cache Docker layers - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # pin@v2 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx- - - name: Run e2e tests - run: docker-compose up --build --exit-code-from synpress diff --git a/.github/workflows/testcafe.yml b/.github/workflows/testcafe.yml deleted file mode 100644 index 190e74068..000000000 --- a/.github/workflows/testcafe.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Testcafe - -on: - push: - branches: - - master - pull_request: - -jobs: - testcafe: - name: Testcafe e2e Test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: "14" - - name: Install Packages - if: ${{ !contains(github.event.head_commit.message, '[skip test]') }} - run: npm ci - - name: Build - if: ${{ !contains(github.event.head_commit.message, '[skip test]') }} - run: npm run build:test - - name: Integration - testcafe - if: ${{ !contains(github.event.head_commit.message, '[skip test]') }} - id: testcafe - run: npm run integration:testcafe:ci - - name: Upload Artifact - if: ${{ failure() && steps.testcafe.outcome == 'failure' }} - uses: actions/upload-artifact@v3 - with: - name: testcafe-fail-screenshots - path: artifacts - if-no-files-found: ignore - retention-days: 1 diff --git a/.gitignore b/.gitignore index bd278e624..34126baa4 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,6 @@ yarn.lock /tests/e2e/videos .lighthouseci lighthouseReport -/public/static/sitemap.xml \ No newline at end of file +networks/fixtures/**/unwrapped/ +networks/fixtures/**/wrapped/ +/public/static/sitemap.xml diff --git a/network-compose.yml b/network-compose.yml new file mode 100644 index 000000000..bbdaefa58 --- /dev/null +++ b/network-compose.yml @@ -0,0 +1,31 @@ +# https://github.com/drptbl/synpress-setup-example/blob/1d980157ef343de54f786e1115e1da590f1ba1d1/docker-compose.yml#L22-L25 +version: "3.9" +services: + synpress: + container_name: synpress + build: . + environment: + - DISPLAY=display:0.0 + depends_on: + - display + entrypoint: [] + working_dir: /app + command: > + bash -c 'echo -n "======> local noVNC URL: + http://localhost:8080/vnc.html?autoconnect=true " && npx wait-on + http://display:8080 && npm ci && npm run network:headful' + networks: + - x11 + display: + container_name: display + image: synthetixio/display:b2643097e891906524e52e7ee956260b20fa01fb-base + environment: + - RUN_XTERM=no + - DISPLAY_WIDTH=1920 + - DISPLAY_HEIGHT=1080 + ports: + - "8080:8080" + networks: + - x11 +networks: + x11: diff --git a/networks/.eslintrc.js b/networks/.eslintrc.js new file mode 100644 index 000000000..f2f443fd9 --- /dev/null +++ b/networks/.eslintrc.js @@ -0,0 +1,6 @@ +const path = require("path"); +const synpressPath = path.join(process.cwd(), "/node_modules/@synthetixio/synpress"); + +module.exports = { + extends: `${synpressPath}/.eslintrc.js`, +}; diff --git a/networks/docker/polygon.yml b/networks/docker/polygon.yml new file mode 100644 index 000000000..cd2aac2ea --- /dev/null +++ b/networks/docker/polygon.yml @@ -0,0 +1,32 @@ +# https://github.com/drptbl/synpress-setup-example/blob/1d980157ef343de54f786e1115e1da590f1ba1d1/docker-compose.yml#L22-L25 +version: "3.9" +services: + synpress: + container_name: synpress + build: ../../ + environment: + - DISPLAY=display:0.0 + - SECRET_WORDS + depends_on: + - display + entrypoint: [] + working_dir: /app + command: > + bash -c 'echo -n "======> local noVNC URL: + http://localhost:8080/vnc.html?autoconnect=true " && npx wait-on + http://display:8080 && npm ci && npm run network:polygon:headful' + networks: + - x11 + display: + container_name: display + image: synthetixio/display:b2643097e891906524e52e7ee956260b20fa01fb-base + environment: + - RUN_XTERM=no + - DISPLAY_WIDTH=1920 + - DISPLAY_HEIGHT=1080 + ports: + - "8080:8080" + networks: + - x11 +networks: + x11: diff --git a/networks/docker/xdcapothem.yml b/networks/docker/xdcapothem.yml new file mode 100644 index 000000000..eac986324 --- /dev/null +++ b/networks/docker/xdcapothem.yml @@ -0,0 +1,32 @@ +# https://github.com/drptbl/synpress-setup-example/blob/1d980157ef343de54f786e1115e1da590f1ba1d1/docker-compose.yml#L22-L25 +version: "3.9" +services: + synpress: + container_name: xdcapothem-synpress + build: ../../ + environment: + - DISPLAY=display:0.0 + - SECRET_WORDS + depends_on: + - display + entrypoint: [] + working_dir: /app + command: > + bash -c 'echo -n "======> local noVNC URL: + http://localhost:8080/vnc.html?autoconnect=true " && npx wait-on + http://display:8080 && npm ci && npm run network:xdcapothem:headful' + networks: + - x11 + display: + container_name: xdcapothem-display + image: synthetixio/display:b2643097e891906524e52e7ee956260b20fa01fb-base + environment: + - RUN_XTERM=no + - DISPLAY_WIDTH=1920 + - DISPLAY_HEIGHT=1080 + ports: + - "8080:8080" + networks: + - x11 +networks: + x11: diff --git a/networks/eslintrc.js b/networks/eslintrc.js new file mode 100644 index 000000000..f2f443fd9 --- /dev/null +++ b/networks/eslintrc.js @@ -0,0 +1,6 @@ +const path = require("path"); +const synpressPath = path.join(process.cwd(), "/node_modules/@synthetixio/synpress"); + +module.exports = { + extends: `${synpressPath}/.eslintrc.js`, +}; diff --git a/networks/fixtures/polygon/ebl-mumbai-surrendered.json b/networks/fixtures/polygon/ebl-mumbai-surrendered.json new file mode 100644 index 000000000..ecdcf2790 --- /dev/null +++ b/networks/fixtures/polygon/ebl-mumbai-surrendered.json @@ -0,0 +1,76 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "network": { + "chain": "MATIC", + "chainId": "80001" + }, + "credentialSubject": { + "shipper": { + "address": { + "street": "Street", + "country": "Country" + }, + "name": "Shipper1" + }, + "consignee": { + "name": "Consignee" + }, + "notifyParty": { + "name": "NotifyName" + }, + "blNumber": "BL", + "scac": "SCAC", + "carrierName": "Signed", + "vessel": "NotifyVessel", + "voyageNo": "NotifyNo", + "portOfLoading": "NotifyPort", + "portOfDischarge": "NotifyDischarge", + "placeOfReceipt": "NotifyReceipt", + "placeOfDelivery": "NotifyDelivery" + }, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": [ + "VerifiableCredential", + "OpenAttestationCredential" + ], + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "0x6E0D617cc73AAa720f6cD1825a0b949c69f220D4", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "tradetrust-mumbai.puayhiang.com" + } + }, + "issuer": { + "id": "https://example.com", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "8f08a4c9a97b894003d8c3d3f1849ef5de1408c472b62e61b8470dabf03f3cab", + "proofs": [], + "merkleRoot": "8f08a4c9a97b894003d8c3d3f1849ef5de1408c472b62e61b8470dabf03f3cab", + "salts": "W3sidmFsdWUiOiIxNDVhZTlkYjZiOTAyMzM2ODU2MTdlOWQ1MDYwMTdkYjFjMDkzMzI3NWYxZTU0NGRlZWE1ZWZjYzBhMDE4MTA3IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiMWM0YzIzYzNmOTc0N2Y2NTI0NWIyZDBmYzhmNjA4NDdlYWM0ZDc4MWNhOGJkZWFkYzM1NzgwOWY5ZDQ2Y2I3YiIsInBhdGgiOiJuZXR3b3JrLmNoYWluIn0seyJ2YWx1ZSI6ImJhMmI5MGQyYWQ1YmU0ZjhhN2M3ZWEyZTY3NzI1NjI0M2ZiM2ZiNmQ5N2YyM2YwZWUxNmM4OWQ0ZjliNDlmM2EiLCJwYXRoIjoibmV0d29yay5jaGFpbklkIn0seyJ2YWx1ZSI6ImJiY2ZkOGRjNTRmZDFkODkyZTIxZjgyZDBlZGQ4ZDFkMTExMjk4Y2M5ZGI3OGMxNzUxOTNmNjg4ZDhkNjFkNGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc2hpcHBlci5hZGRyZXNzLnN0cmVldCJ9LHsidmFsdWUiOiJmZDA2YmQ2Njc5OWU4ZmZlYjBmZTdiODRlMGQzOGEwNmZkM2IzYzI2MWQ5ZGRhMjY4ZGJlOTViMzE0NWRlMmMzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIuYWRkcmVzcy5jb3VudHJ5In0seyJ2YWx1ZSI6ImI5MWY4MDhmNGZjNjY4YmM3MWE5ZjAzNTY4YmM5NjZkZjgwMjQ3ZGI0YWExNGY0MzI5MGMxYjE0YTU2NmNjZTkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc2hpcHBlci5uYW1lIn0seyJ2YWx1ZSI6ImY0N2YxZmE3ODIxZTA1ODA0MjlkNDhlZDQ2YjM5NzNmODM5OTJiYTcyMDYxMThlMzEwOTNkODdiNzc3OTkzY2QiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY29uc2lnbmVlLm5hbWUifSx7InZhbHVlIjoiYzg0N2E1NzRkYTBlZDhhYTM3NGRhN2UzM2ViODQ5MzkzNTJkNjM4M2Y3OGZhY2IzZTZhODMzYzY0M2U5MjI2MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5ub3RpZnlQYXJ0eS5uYW1lIn0seyJ2YWx1ZSI6Ijg0NWE5NjllZmFhYWQ4NGVhNmZiN2JjMDRiYmJlMGVkYjIxNzNiZjU2NTI5ZGE4ODgyMTIxODY3NzFiZTA5NmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmxOdW1iZXIifSx7InZhbHVlIjoiMjgzMjQ1MjQxZGY3MDc2ODcyZGQzOWQ2NjNmODIxMTViMTBjZTc5NWRjNzg0M2QyOTI0MTVmZTU1NzY0NGU0MiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zY2FjIn0seyJ2YWx1ZSI6ImNmZTQ3OTQzNTI4NGQ1NDM1ODFmZmE2OTMwNzMwMTdhNzNkM2U4MDc3ZTg2MzNhYTllODk2ZDRhNDJjM2ZkMDciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2Fycmllck5hbWUifSx7InZhbHVlIjoiYjBhY2E2NzFlMzBlZjE1NmJjYTY2YWI5M2JhY2E1MDc1Y2NhMmNkNTlmZTI3MWJjY2M3MmM4NDg0ZWM2ZjhhYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC52ZXNzZWwifSx7InZhbHVlIjoiNzdjNzUzYjgwMTdiOTE3MWY2YjlkMTU3ZGZlZjZlMjY1OGQwM2VlYjlkNDJjNzc3ZTk5NTRmZWFlYmYyNGI4ZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC52b3lhZ2VObyJ9LHsidmFsdWUiOiJhYzg3MTg5MTVlZjc0Y2Q4MjE3OTUxMDM5YzgzMTFkMjI4M2E2MzY1Y2E1N2Y1MmFiNzc0YTY2Njk4MWVlODRiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBvcnRPZkxvYWRpbmcifSx7InZhbHVlIjoiZDg4NmFjNmEzYzBkYjFmNGZhNWZlNzkzZGY4MWMxM2E0ZjEzNmYyMjI4YWM2MTU4ZGYyODc1YmNlNGU1ODA4ZSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wb3J0T2ZEaXNjaGFyZ2UifSx7InZhbHVlIjoiZjY5NmZjZjEyZWEzYTMwYzRlMjkwYThjNmNjYzg2NzY5NzY3YzFhNWNjMDYyYWM2NjRiYmQ1NDkzN2FjODZiZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wbGFjZU9mUmVjZWlwdCJ9LHsidmFsdWUiOiIyODAwZjA4ZDk4NGQ4ZDA0YjZhNzM1MDJkMDQ0ZWQ1ZmE4ZjRlMDY3YmViY2Y0YTY4ZDUxMDliZGQ3ZGNjNzg1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBsYWNlT2ZEZWxpdmVyeSJ9LHsidmFsdWUiOiJhN2U3YzkwMTYyZThhMjg0MmRlNGE3NWY0ZTRkMWViMjZiNTk3YTU4NGQyOGE3OGJkNWJhNDE3ZWE3YzQwZDY0IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImQ1ZTA3M2FmYmE0ZDcwMjY3OWMyOWIwY2I4MjQxOGJiZjNhMjE4ODhiOTVlMWNiMzliZmFlNWIxNTQ3MmVjODMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiYzIyODM3MWViNTE2ZDgwN2EwMjkwNGViYmQ1ZjkxYjZkODE4YjMxODAzZGNmNzg4ZDM2MzZiOTA5Y2UxMTkzYyIsInBhdGgiOiJAY29udGV4dFsyXSJ9LHsidmFsdWUiOiJiMjBkNzA2NDlhYjU4MzZmOTViYmYyM2VmMDE5OWIwMGM2NzQzMDk5Y2ZkOTU2MmI1ZDZkYTcxNjAzNDBhZjg0IiwicGF0aCI6InR5cGVbMF0ifSx7InZhbHVlIjoiNjIyY2Y3YTIzZGI2NmM3YWY3MDM0YWVlNjhhYmYzNDM5NjZiMmFiZWE3NmU1NDZhNjM0YjIxZTE3ZmIxMWU5ZCIsInBhdGgiOiJ0eXBlWzFdIn0seyJ2YWx1ZSI6IjAyMmU4ZTNhYWIyNjQ3ZWVhNzMwOGE4YTFlNGEwODE0NTAyNDA0OTBkZmY1YTMzZmVhYTdhMzE3Y2E0MzQwOTEiLCJwYXRoIjoiaXNzdWFuY2VEYXRlIn0seyJ2YWx1ZSI6IjEwMDU2NTViODgwNWUxNTdmMDQ0MGVlNTdlZjRjOTdmMmIxNDBlZTNhOGFhNzA1YWNlMmM1MTIyMTMwOTkzNWIiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUudHlwZSJ9LHsidmFsdWUiOiIwNDM4ODk0YzBkM2RlOTY2Y2ZkMzY1OTBjYjRlM2VlZDk4ODAzMGQ5NGZmYTRmOWE1MTdhMzlmN2ZiZGQ4MjhmIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLm5hbWUifSx7InZhbHVlIjoiM2E3OGZkN2ZiZGRiYzNlYThhNjU4ODJhMzkyYjkzZGZlNjU5YzM5Njg1ODg3YTViZWE5NTBhMWNjYTg4ZTE4NSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiNmI5NjkwNzE2MmQ3NDBhYzQ1NTY2MDMwNTM2NTg2NDhjZWFkMzcwYjVkOGQwYzhhNWYwMWMzYWE5ZjNiMjJhZCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6IjJkN2NmYWZjOTJhY2VkYTBmMDYzZTY0ZWE4ZTYxOGY4ZDgwNzc0MzVmMTZmNmY2YmRjODc0YWI5NTlkOWI0MGMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6ImM3OTZmYTdjOTBkZjI1Y2ZjMGUzMWE0OGRmMWNhNDE1ZTMyOWUyYWJiNGU2YjdkZGYzZDQ5NjZmZjJmM2UwN2QiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiYzQ2YzcxYjQ1MTk3Mjk4OTYzMWViZjg5NTYxNTU0ZTUxNzc5M2VkZDA2ZGVhMDRjMjk4ZTM3YmZkMTZmYTlkZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5yZXZvY2F0aW9uLnR5cGUifSx7InZhbHVlIjoiMjZmN2UwYmRmNDU4MDQ4MTU4Njk5ZjkyNmJjMzhjMzA4MWFhODNhZTRkYzk1Y2QyYWMyY2E2ODBkZTY2YzZiYSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiY2NhN2FhOWY0OGFjMzI0ZjMzODhkNjU0MmVmNDE2NzAzMDQxZjA0OTYxMzJiNGViYjViODdkZWE5MjkyZjRjMCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiNzgyZDU2ZDdhZWYyMzI1OTNmMTUxODE1OGNiMmI5OGZjODI5NmM4OTQzM2E3NWFjY2JmOWEyMjBhM2U0NjM5NCIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiODhhMGM3ODliOWMwNTUwM2VkNzUxZDJhMjc0NjVkYzhmYTRlNzE5MTQ1NjgxNzc3MWY3MmUwNjUwYjViMGU4OCIsInBhdGgiOiJpc3N1ZXIubmFtZSJ9LHsidmFsdWUiOiI1NTQyMDkyOWQyOTAzMzA1NDRkNGRjMDNlYWVhZjg0NzA1YTFlZGFkN2YzYmU4MTZkNjIxOTI4NDBmYTM2YzQ2IiwicGF0aCI6Imlzc3Vlci50eXBlIn1d", + "privacy": { + "obfuscated": [] + } + } + } \ No newline at end of file diff --git a/networks/fixtures/polygon/ebl-mumbai.json b/networks/fixtures/polygon/ebl-mumbai.json new file mode 100644 index 000000000..e095c4728 --- /dev/null +++ b/networks/fixtures/polygon/ebl-mumbai.json @@ -0,0 +1,49 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "network": { "chain": "MATIC", "chainId": "80001" }, + "credentialSubject": { + "shipper": { "address": { "street": "StreetAddress", "country": "CountryAddress" }, "name": "ShipperName" }, + "consignee": { "name": "ConsigneeName" }, + "notifyParty": { "name": "NotifyName" }, + "blNumber": "BL", + "scac": "SCAC", + "carrierName": "CarrierSignature", + "vessel": "NotifyVessel", + "voyageNo": "NotifyVoyage", + "portOfLoading": "NotifyLoadingPort", + "portOfDischarge": "NotifyDischargePort", + "placeOfReceipt": "NotifyReceiptPlace", + "placeOfDelivery": "NotifyDeliveryPlace" + }, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "0x6E0D617cc73AAa720f6cD1825a0b949c69f220D4", + "revocation": { "type": "NONE" } + }, + "identityProof": { "type": "DNS-TXT", "identifier": "tradetrust-mumbai.puayhiang.com" } + }, + "issuer": { "id": "https://example.com", "name": "DEMO TOKEN REGISTRY", "type": "OpenAttestationIssuer" }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "5a09c2443ea2b6ec6a343e8c0dba8f195fcc97e2abaa21ee061840938e46bd9a", + "proofs": [], + "merkleRoot": "5a09c2443ea2b6ec6a343e8c0dba8f195fcc97e2abaa21ee061840938e46bd9a", + "salts": "W3sidmFsdWUiOiIyODI2MTM3MDEzMWYyYmI3YWZlYTZmNzE1Y2E1Yzg4ZWExN2IyNWFiY2MwMDY2OTBlZjVjZjlhNWIxODQ1NTg3IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiY2Y3NTVkYzdjM2U3MWUzZDVkZTk4NzJiMzlhMTJkNDYyODAzYWZiZjBjZGM4ZTk0YWJmMTA0NTY0NDNlZTg5OSIsInBhdGgiOiJuZXR3b3JrLmNoYWluIn0seyJ2YWx1ZSI6ImY2YmU4NjU0NTg0NTUzNTI3NDQyNDhkZTBiNDA1MjliNGI0YjcxMjFkZTA3NDE5MDM0MmJmZmRlYTQxZGM4ZGQiLCJwYXRoIjoibmV0d29yay5jaGFpbklkIn0seyJ2YWx1ZSI6IjMyNjQwM2U4MmZhMGI4MjkwNGYzN2I2ODJjOGZlZjVlMTBmODY5ZjM4ODgzZGE3NDk5ODhhNTlkYTJjNzEwNzEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc2hpcHBlci5hZGRyZXNzLnN0cmVldCJ9LHsidmFsdWUiOiI3MzY3YWFmZDIxMzgyMGFiYWJjMmQ3YTgxZjBhZWQ3NjIyMzJiNWE0NDAwYzFlNGJkNTFhMTZjNjA5MzBiNzNkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIuYWRkcmVzcy5jb3VudHJ5In0seyJ2YWx1ZSI6IjhkZTdmNGI2ZGIzYjY0ZTkzMmYwMDMwYTM4ZGJhMDQyNzNjZjZlNGFmMzQ2YWY1MjJhYjJiMWRhZmJmYWRmMDMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc2hpcHBlci5uYW1lIn0seyJ2YWx1ZSI6IjJiYzQwZWJjZTVjOTkzZmQxNTBjNzg2OGM5ZTk5OTkxM2FmM2E3OTE5YTkzNTg5NzBmYjA3YTZiNjg1NTY3MTIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY29uc2lnbmVlLm5hbWUifSx7InZhbHVlIjoiZDgyZWQ4ZmUyODdiNmMwMTlkNWM3MmZjZTcwOWFhYmZlY2U1Y2NhYzc0MmQ1ZDlhY2FlNWQ1ZGMyNGMwYzI4YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5ub3RpZnlQYXJ0eS5uYW1lIn0seyJ2YWx1ZSI6ImNlZWE5Y2M4YTVkYTZiYmRkODdmODg2Mzg5MTY2OTJmYmYxMGY4ZTZlOWU5OWU0Y2VhZDEzOGIwZDUwNjk4OGMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmxOdW1iZXIifSx7InZhbHVlIjoiZTIyZjU3Njk1Y2IyMzczMjM4MWNhZTExZmIyZDFkNDM2NGNmYTkwYzlhYWUwMzJjYzVjODE2NWM2YzExY2E3NiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zY2FjIn0seyJ2YWx1ZSI6ImY4NDk4ZmM1MWExZWZkMDU3OTE2YWIyNzRiMGE1ZjY1YzMwYTE1YmY1NTYzNGUwMDRmOWIyZmJkMDk1YTlmZmUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2Fycmllck5hbWUifSx7InZhbHVlIjoiMGJhYmI1NmJiMTQxZmMyMDA2YjY5ZmE4MTcwNjlkYzYxMzg5NjA1NmVmNTcxZTkyYjE4YjI4NmRhMjRmZGNkZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC52ZXNzZWwifSx7InZhbHVlIjoiMmJmNjhiYTM0OGEwOGQ1ZTQyYjUzNTUwZWUyOTBkMTJiZTcxOTRjYTU2NThkNGNhYWVjN2E3YzkxNWM1NDFjNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC52b3lhZ2VObyJ9LHsidmFsdWUiOiI1NjBiZDg1MjY2ZGNjYjRmNWI0N2IxMmE5ZThhZWRmZDgwMTE5ZmViMzAyMjUxYjVhNjVjOTUyY2Y0YTFmZWQ1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBvcnRPZkxvYWRpbmcifSx7InZhbHVlIjoiN2RjZDA5NzhhOWM4Yjg0MjE2YWNmMDM3ZmExMmIzNTNlZDg2OTM0MTI0MjY5OTFhY2FlOGNlYjNiZDMzMjQwOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wb3J0T2ZEaXNjaGFyZ2UifSx7InZhbHVlIjoiNzg5MmI0ODc1ZTQ2NWUxMGYwYmM3MzRkOWZlYWRiYTFlMzkyYWY4ZWVjYjQzMWU3NDlhMzIxNmNjNmMyMzc2OCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wbGFjZU9mUmVjZWlwdCJ9LHsidmFsdWUiOiJhY2VjYTliMzlhODJkN2IxMjc2MDA5MTk4OTU4YTliODgxZTI4NjRmNjVlMjYxMWE1MjIzMDgzZTQyOWRkMTczIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBsYWNlT2ZEZWxpdmVyeSJ9LHsidmFsdWUiOiJiYmYxNTU4YTdmNTU5ODJlNTk0MDBlOGU4Y2VkZmNhYWRiZjJiZjM4YjI2ZDdkMjAxOTRiMDBmNzNmNTZhZGNkIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjUxMTZiYTBmMDM0MjA4ODQ5OTU2MzY4NmI0YmIwZmNkNDA1NDVjN2YwN2YwODc0ZGQ4MGRmMWYxODJjYTEzZTMiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiNzQ0NTAyNjg3NDRmN2U0ZTAzMzNjMTk3OWM2NDJmN2M5OTA4ZDQzYjkzNmY1ODhjY2MzYWNlODJiZTFjNjg4OCIsInBhdGgiOiJAY29udGV4dFsyXSJ9LHsidmFsdWUiOiJmMTkyMmE5NjM2YTZiZDE5YWNlMDIzZGMyMWQzZGU5Y2EzZWExNmRhMzFkMWY1MDgxNzhiYzg5Y2U1Y2FiNGZiIiwicGF0aCI6InR5cGVbMF0ifSx7InZhbHVlIjoiZTZhNTlmMGI4MjU2ZDllOWFlZWRiMzk3NTNmMDE1ZjM2ZTQ5ZjYwYTQ5NGMyZDRkYmFhZjc1ZDFiZTFkNDVkNSIsInBhdGgiOiJ0eXBlWzFdIn0seyJ2YWx1ZSI6ImEwYWZmMWU4NTgzOTIxZWM2ZGJiOGJlNTRhZTUwNmYxZGZjMTNlYTAzMzljMmMzMjkyM2QwN2FlNjI3MTIyYjIiLCJwYXRoIjoiaXNzdWFuY2VEYXRlIn0seyJ2YWx1ZSI6IjZlZGNlMDQ5OGNlNWQ5MWMzYTIxZDU2NjAxOWY2NDUyYmI0YTA0MzYzMTMwOGEwNmMzNTZmNmVjYTExMmYyYzIiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUudHlwZSJ9LHsidmFsdWUiOiIyMDU1YmIxYjdmZjIyNmViMzM0OTk3Y2U0ZjkwZmRkYzg5ZWJiZDFhNzQxZTNmMGY4YzkyMThjYzA2OGJjYzE4IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLm5hbWUifSx7InZhbHVlIjoiY2RlYjJlNjVjZWYxYjc2YWRhMDMxYzI1ZmQ1Yjk0OGQ5YzgzNGZhZjNkMGEyZjgyZWMzNDY5MWViMzNkZjJiMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiOGIwNDA3ODE2YjQ3ODNiMjMyMzU1YmM1NzFiZjJkYjc0NGVjMDQ5YWE1OGU4NTkzNGIxNjVjNTlhZWRhZTY0MyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6ImFlNTFkYjY2Y2IyM2RlOGU5NDY0NWQwZjY0MTZiMDhiY2Y0ZTllNWFmOWVlMTgzN2I5M2E4YTRlMDc5ZjJiODMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6Ijg1NjcxZmM0NmY5OTZkMDljMGRmM2YxMzY2ZDIxNWFjZTJhOTRiNDQyZDE3OTA3YTE0MzA4MzQwZTRmNzcxODEiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiOWMyNGVkNjlkNTlkZmJhNTRkMmY5OWUzNjJmMTZlNDE5YTg3ZmFjOWU0YThhOTFkZDgzNDkzMTVmOTE3YjUxZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5yZXZvY2F0aW9uLnR5cGUifSx7InZhbHVlIjoiYTU0OTIwN2ZmODdkYzIxMDIyOWNkNWE0ZDk3NjkzODVhNzFkYWM2MWIyMGQ3NmY4OWNmZjhkMmUxOWJkZDhhYyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNDFiZGIxMWI0M2ZlOGYwYTFlY2VkYTUwYzc3ZmNlZmEyZmRkMDIyOGVlYzg5ZTRhMTY5NWVhYmE3NTg0NzNlMiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiYmUzODVhZGYzOTZjYmM5ZDRmM2RlYzk0YzFmZWZhMTcyNTdmMWMwNDQwYmYwMzcwMjFmYjZkMGEyYjlkYzljMSIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiZDY0MmYzYzNkYzc3ODYzMjEyNzJlNmY2NjA0NTFlZjE4NmUzMzY1YWVhZGI5YmM5N2FjYjFlNmFkMTYwNmM5MSIsInBhdGgiOiJpc3N1ZXIubmFtZSJ9LHsidmFsdWUiOiIzYmEyYmQ0NjY0OWVmYTMzYzdlNTZiNDgwNGFiYWRmYjhkYzRkMjk4NDllOGQxZjdjMWRjOTcxZTA0MTEzOWY2IiwicGF0aCI6Imlzc3Vlci50eXBlIn1d", + "privacy": { "obfuscated": [] } + } + } \ No newline at end of file diff --git a/networks/fixtures/reference/ebl-endorse-owner.json b/networks/fixtures/reference/ebl-endorse-owner.json new file mode 100644 index 000000000..2eb2f6c97 --- /dev/null +++ b/networks/fixtures/reference/ebl-endorse-owner.json @@ -0,0 +1,50 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "network": { + "chain": "$CHAIN", + "chainId": "$CHAINID" + }, + "credentialSubject": { + "shipper": { + "address": {} + }, + "consignee": {}, + "notifyParty": {}, + "blNumber": "110", + "scac": "SGSG" + }, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": [ + "VerifiableCredential", + "OpenAttestationCredential" + ], + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "$TOKENREGISTRYADDRESS", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "$DOMAINNAME" + } + }, + "issuer": { + "id": "https://example.com", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + } +} \ No newline at end of file diff --git a/networks/fixtures/reference/ebl-nominate-owner.json b/networks/fixtures/reference/ebl-nominate-owner.json new file mode 100644 index 000000000..f97dfd224 --- /dev/null +++ b/networks/fixtures/reference/ebl-nominate-owner.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "network": { + "chain": "$CHAIN", + "chainId": "$CHAINID" + }, + "credentialSubject": { + "shipper": { + "address": {} + }, + "consignee": {}, + "notifyParty": {}, + "blNumber": "111", + "scac": "SGSG" + }, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "$TOKENREGISTRYADDRESS", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "$DOMAINNAME" + } + }, + "issuer": { + "id": "https://example.com", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + } +} diff --git a/networks/fixtures/reference/ebl-surrender.json b/networks/fixtures/reference/ebl-surrender.json new file mode 100644 index 000000000..c7bbf824b --- /dev/null +++ b/networks/fixtures/reference/ebl-surrender.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "network": { + "chain": "$CHAIN", + "chainId": "$CHAINID" + }, + "credentialSubject": { + "shipper": { + "address": {} + }, + "consignee": {}, + "notifyParty": {}, + "blNumber": "112", + "scac": "SGSG" + }, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "$TOKENREGISTRYADDRESS", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "$DOMAINNAME" + } + }, + "issuer": { + "id": "https://example.com", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + } +} diff --git a/networks/fixtures/reference/ebl-transfer-holder.json b/networks/fixtures/reference/ebl-transfer-holder.json new file mode 100644 index 000000000..afb7af2fd --- /dev/null +++ b/networks/fixtures/reference/ebl-transfer-holder.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "network": { + "chain": "$CHAIN", + "chainId": "$CHAINID" + }, + "credentialSubject": { + "shipper": { + "address": {} + }, + "consignee": {}, + "notifyParty": {}, + "blNumber": "113", + "scac": "SGSG" + }, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "$TOKENREGISTRYADDRESS", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "$DOMAINNAME" + } + }, + "issuer": { + "id": "https://example.com", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + } +} diff --git a/networks/fixtures/xdcapothem/ebl-apothem-surrendered.json b/networks/fixtures/xdcapothem/ebl-apothem-surrendered.json new file mode 100644 index 000000000..1ae85efe9 --- /dev/null +++ b/networks/fixtures/xdcapothem/ebl-apothem-surrendered.json @@ -0,0 +1,76 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "network": { + "chain": "XDC", + "chainId": "51" + }, + "credentialSubject": { + "shipper": { + "address": { + "street": "StreetAddress", + "country": "CountryAddress" + }, + "name": "ShipperName" + }, + "consignee": { + "name": "ConsigneeName" + }, + "notifyParty": { + "name": "NotifyName" + }, + "blNumber": "BL", + "scac": "SCAC", + "carrierName": "CarrierSignature", + "vessel": "NotifyVessel", + "voyageNo": "NotifyVoyage", + "portOfLoading": "NotifyLoadingPort", + "portOfDischarge": "NotifyDischargePort", + "placeOfReceipt": "NotifyReceiptPlace", + "placeOfDelivery": "NotifyDeliveryPlace" + }, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": [ + "VerifiableCredential", + "OpenAttestationCredential" + ], + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "0x1a378fEEc3ed9B63B872B11561FCf19f6d2CE793", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "tradetrust-apothem.xdc.network" + } + }, + "issuer": { + "id": "https://example.com", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "5d0de1b3a0dd8188c14460de7de76210a17a21c4f2d06cc451418ea58be662f8", + "proofs": [], + "merkleRoot": "5d0de1b3a0dd8188c14460de7de76210a17a21c4f2d06cc451418ea58be662f8", + "salts": "W3sidmFsdWUiOiJiNWM0MGQ4ZjkwYTM5NGNiOGM5YzQ5NWJkNjNkNmE3ZWRmMjk3NTMyMWZjN2M0MGRiOTVmNmE5YTRjYmM5OWZmIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiODk2YTFmNzZmMDgyNTNkZTM5NTg3M2JlYjcxOGI2ODQwODM5ZjVmNWVmOGEwNDRmYWFlM2QyM2U5ODJhMWU0NCIsInBhdGgiOiJuZXR3b3JrLmNoYWluIn0seyJ2YWx1ZSI6IjIxYmExZjM4MjdiM2IxZDUzZjI5ZDQ5MzFlYjQ4YTg4MmVhOGFlNGQwYTRlN2VlMGI0ZTAwNTQzMDQ5MjFhZWYiLCJwYXRoIjoibmV0d29yay5jaGFpbklkIn0seyJ2YWx1ZSI6ImQyZDk5YzUyYTkzNmEyNDM5ODgzOTAzOWE2MmI5NzRhYzFhNzQyODQ1YzM2ODRlZGMxNzNhNTgwOWM2MDMxOTUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc2hpcHBlci5hZGRyZXNzLnN0cmVldCJ9LHsidmFsdWUiOiI5Nzg1ZWQ0MGQwMDY5NGI1NWY5MWFiNTUwN2M5ZjdlMDY2YTllOGI1NDY0MGU0MmQ0NDNmNzRiYjY4MWI4NmVhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIuYWRkcmVzcy5jb3VudHJ5In0seyJ2YWx1ZSI6IjczOWUyOGI3ZmJmNWFkNzhhNzlmNmY2ZDU4ZWUyNmIxZjIyZjkxYmY5NWYwZWViMzI3NDVmZTE5MjZkOWM4OGEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc2hpcHBlci5uYW1lIn0seyJ2YWx1ZSI6ImE5Mjk4ZDBmOTAyYjhlMDMwODBlNjU1ZjMyNWJiMjBhNDJlZGExZWUyOWRkY2RiMGFhOTZjNjJkMmIyODU2ZjMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY29uc2lnbmVlLm5hbWUifSx7InZhbHVlIjoiNzJmMzI0NTVjMTE5NzFmYWIyODJkN2JmNGRhZTg4YWQ2YTQ5ZWRkMDgwOWJkY2ZjZTVhMmZhMjVhYzVkOWRkZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5ub3RpZnlQYXJ0eS5uYW1lIn0seyJ2YWx1ZSI6IjYwNjJjZTQ2ZDE2NDYxOTg2MDBlNzY0Yjk5YTg2MzNhODUwNWUzYjBjMGI4MDNjZjhkMTUxOGI4YzliMjVkZmIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmxOdW1iZXIifSx7InZhbHVlIjoiNThlN2YwN2M3MWQ5MTVhMGY4MzI2MTBiNzA2MTM5NGIzMjNlNzQzYWY1YjgwYTM0YWY4N2NhMTlkODZkNzgxNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zY2FjIn0seyJ2YWx1ZSI6IjQzMjEyZjI3OTRjNzI4NTQ3MTYwNjY2OTgyYjkyNjA5N2VkYTkyZTA0YzkyYWJjZGE2NWNhY2JjNzQ4Mjk3ZWMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2Fycmllck5hbWUifSx7InZhbHVlIjoiMTcxYjlhN2M2NDBjYmMxMzBlMzliYjM5ZTg4MmEyZWM5ZGNkZjQ4ZmM1YmY3MDg2MDk1NDdlNjFjYzkwNTNhZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC52ZXNzZWwifSx7InZhbHVlIjoiOTFkN2RjNTZjZWQwMDIxYTJkY2I3MzU1Nzg1OWY2NTMyOWVlNTQwNDY3Mzg3NzU4NTlmZWY3MzI0Y2I0YTFkNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC52b3lhZ2VObyJ9LHsidmFsdWUiOiJkYmZiOWQ3MGNiZGJmMGU3NzBjOGRiMTEzNmU1NjU5NjJhNmRiNzA5NzIxYjU4MzBlZGUyYjU1Y2ZkMzZmNDZkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBvcnRPZkxvYWRpbmcifSx7InZhbHVlIjoiOGMzZjk3ODg2YTg1NmNlNmRkNzllNGJhMWIwODFjNDIzZWZmMGY3NzEwZDNiYmYwNGYxOThkMmNiZjdhZDZmYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wb3J0T2ZEaXNjaGFyZ2UifSx7InZhbHVlIjoiZDJjNGE5Nzg5YzdjNjYxMTNiYmM1MDY0YTE4ODYzYjhjZmMzZWY1N2FjNGVlMTRiNzQ2MTk5YTQ4Zjg2OTZhOCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wbGFjZU9mUmVjZWlwdCJ9LHsidmFsdWUiOiJhOTUwMGU0YTBkNWVmOTdlMzM3ZDkzMzA0MzBiNTU2NDhkZmVkNWM2NGI0MDRmNDNlNjI5OGIwNzJlMDRiNjgyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBsYWNlT2ZEZWxpdmVyeSJ9LHsidmFsdWUiOiI4NjVkMmNlNjA1N2Q3YTA0N2ZhYjc1YTgzMmQwOWY0YTczYWVhOGQ1MWZiMmRkNWExOGQ2YzhlMDRkNDI2NDAzIiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6IjE4MmIwNjJiN2I5NDU0MDQxZWFkNWM3YmM3OTc5OTM1NzI1Y2UzMzRjMjZjOWI2ZjU3YzQyM2I5MGY0ZjI1NTIiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiOGI3ZTcwNDY4MzNlOTk1MDljZDcxZDRmODI0ZGFjZDk0YWIzNGIxMTdhODJlYzc2MTMzNmE1ZDZhOGQ0NjFjOCIsInBhdGgiOiJAY29udGV4dFsyXSJ9LHsidmFsdWUiOiJkZTQ2Y2RmNjUxNzJhNDIyNTBlZjNlZWUzMDdmN2MwMWQ5YTNhMjM3ODlkM2IxNmNmNjgwMTc3ZjJmZmZlZTNiIiwicGF0aCI6InR5cGVbMF0ifSx7InZhbHVlIjoiNWFhNmViMTMyY2Q2ZTBkNjA5OTgxMTgzOTBmNTMxZTkxOTVlMDdjODA0NTgyNzQ2NGM2OGZjMmVhZDU0NjM5NiIsInBhdGgiOiJ0eXBlWzFdIn0seyJ2YWx1ZSI6IjA5ZGNkMjE5MTBhOWI2MWJhZDgyOGIwMmYzMjgzYzEzOGQzZmQxNjE0OTVmNmUxNDgxZWM3YjQyYzJiZTBlNDUiLCJwYXRoIjoiaXNzdWFuY2VEYXRlIn0seyJ2YWx1ZSI6IjU5YzRhZDFhOGVkM2FiODQ1MzFlYTUxZjkzNDllYzFmODgzNDc5YWYyYjVhZTRhZjE1MTdmN2I3MDdkYWQxOTUiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUudHlwZSJ9LHsidmFsdWUiOiIxOTMyMmRiZWUzOTU2ZDY5YmU2MDU0M2NlNjA0OGMyMjhkNWFjYWI4MzIzNmQwYmM4YmRiNjNiMGRmMDhmOTkxIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLm5hbWUifSx7InZhbHVlIjoiNGQ0ZmNlM2E0MjI5YzljNzdmMDU0ZTYzYTQ0ZmIyNzZlMzQzYjA4Yjc4MzI0ZWQxZDgxNzYxZjNlZDY2YTg5NCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiYzk1NWE2NzFlZjViYTVlNTQ3YjhmN2EyMzUxYmI0YjNjYWE1NDJhZjBiMzYyNWU5NDc5ZTc5MzBjMTJjYzgwYiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6ImZlN2MzODY3YTQ3ZjlhY2NlN2NjNDMxNTkzODliNDc5ZGJhYTZmOTZlMTE4MzA4YzNhODE1MTNiYzJhNDBiYTciLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6ImUzNzA1NTAxYzhkMWJmNzIxODdmZTcyOTZlZmQ1MjFiMjcwYTkyYjQ4MTgyMGQ1MzJhMzRmODliYmM3OWM3ZjMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiZjA1ZjM1Y2Y5OTQwN2EwMTM4OTRjMmI4MTdmNTc2ZDM0YmNmYjVmZWRhNjBmOGFmNGE2YWZhNzIxMzdlM2M0NSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5yZXZvY2F0aW9uLnR5cGUifSx7InZhbHVlIjoiZmYzNjhjZmJlNDk1MDZkOTdiMGNkMDJjMDFlMWZkNDU3NjUwMGU0NzkyMGU1YzE4NjJmOThlMjUyM2IzZmFiMyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiNDBjNGM4ZWZjYTA0ZTEzZDcyNWQ1NTY1MzY1ZjYzY2JkMGE0YjA2MzU1MmFjZjkzNWQwZTY4N2E4OWZkMGE0ZCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiNjVmMTYzNTg1MTIyNmE3OWEyMTI4ODA1ZjdiOTcwNDg2MTg5ZjAxMzg4YTk0M2IzMzQ5MTk2NDdlMGRjMGVmNSIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiNjE0ZDQ0OTMwNWRlYWJhNzkwMmYwZDM5ZmFkYzIzZjRhYmJhNTIxOGI1ZmUwNGE4ZDFmZDZkNzYzYmE3N2FkNCIsInBhdGgiOiJpc3N1ZXIubmFtZSJ9LHsidmFsdWUiOiIwNmVkODU3MTJjNjg2MDc3ZDEyMjdlODY1MTU1YmE0Y2ExYjMxMmRiNmVjNTBmNWE3ZTNlODE2OGVhYTUxYTlkIiwicGF0aCI6Imlzc3Vlci50eXBlIn1d", + "privacy": { + "obfuscated": [] + } + } +} \ No newline at end of file diff --git a/networks/fixtures/xdcapothem/ebl-apothem.json b/networks/fixtures/xdcapothem/ebl-apothem.json new file mode 100644 index 000000000..2d455e8c2 --- /dev/null +++ b/networks/fixtures/xdcapothem/ebl-apothem.json @@ -0,0 +1,76 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "network": { + "chain": "XDC", + "chainId": "51" + }, + "credentialSubject": { + "shipper": { + "address": { + "street": "StreetAddress", + "country": "CountryAddress" + }, + "name": "ShipperName" + }, + "consignee": { + "name": "ConsigneeName" + }, + "notifyParty": { + "name": "NotifyName" + }, + "blNumber": "BL", + "scac": "SCAC", + "carrierName": "CarrierSignature", + "vessel": "NotifyVessel", + "voyageNo": "NotifyVoyage", + "portOfLoading": "NotifyLoadingPort", + "portOfDischarge": "NotifyDischargePort", + "placeOfReceipt": "NotifyReceiptPlace", + "placeOfDelivery": "NotifyDeliveryPlace" + }, + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": [ + "VerifiableCredential", + "OpenAttestationCredential" + ], + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "0x1a378fEEc3ed9B63B872B11561FCf19f6d2CE793", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "tradetrust-apothem.xdc.network" + } + }, + "issuer": { + "id": "https://example.com", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "a6d620b99e738309e6a6c7f76d6fd7880cc9b76d73fd4c2377cae3914c5bfbbc", + "proofs": [], + "merkleRoot": "a6d620b99e738309e6a6c7f76d6fd7880cc9b76d73fd4c2377cae3914c5bfbbc", + "salts": "W3sidmFsdWUiOiI5NzMzYzlkODQ4Yjc3ODQzYzgxZWM0ZDlkN2ZlN2UxZmY2ZTRjZDUwYTlhNmZhYTkwMDNmMGQ5ODg0MTA2ZDU4IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiYzFlYWUzY2I5ZDNmYWVmYzEzZmI0NjQ2MTY2ZDE2YTM0OTJmNjllZjkyYzA4NjhmY2MzODVlOGJjOTUzNGRkMSIsInBhdGgiOiJuZXR3b3JrLmNoYWluIn0seyJ2YWx1ZSI6IjYxMGI2NDQ0OGRkOGQ0NmFkNzY4ZjJlNjc2ZDBiY2EwNWEzOTI3MDYwMjNkZGVjMTUxYjgxZGI1ZDQzM2VjNzEiLCJwYXRoIjoibmV0d29yay5jaGFpbklkIn0seyJ2YWx1ZSI6IjUyNzZjZWUxYWJkZjI3MGI2MmVjZmUyYTkzYjAyOWExYjk0MzllYmY5MDk3ZTFjYmYzZWE1OTA0ZmFhNTQ1YjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc2hpcHBlci5hZGRyZXNzLnN0cmVldCJ9LHsidmFsdWUiOiIyZjgyNmY4Nzk2ZWI3MGRhOTU3OWQ0ZjZmMTYwYzJkNTEzZGM4Njg0OGJmNGI3ZDE1ZTkwNGU4M2E5OGYzODIzIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIuYWRkcmVzcy5jb3VudHJ5In0seyJ2YWx1ZSI6IjlhYTJmYTE4MGFiMmQ1YWRjMzY2ODliN2Y2YzY1YjU3ZWNkZGMzN2I4YmRjYjgxZmJhYWYyMjljOTIxNjJmODAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Quc2hpcHBlci5uYW1lIn0seyJ2YWx1ZSI6IjNhNTc1Njc1NTc3NjU1YThjNDc3ZDc5ZDkyYTcwMTlhOTQ0MjU1OWUyMzkwMDNiNjIxNjVmNDRjMzQ4ZDY4MzciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY29uc2lnbmVlLm5hbWUifSx7InZhbHVlIjoiNGZlZTA0YTNjZmFkMzUyZGIwMDI4MDQyZjUxMTJlZGE3MDIxN2Q3OTdjNGIyZTZmYTQ5M2U5NmVmMjQ5Mzk2YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5ub3RpZnlQYXJ0eS5uYW1lIn0seyJ2YWx1ZSI6IjgzYWYzYzZmMTE0OTM5NmMyNDA0ZDMyNDQ4NGI3MjgxYjJhODMzMTVmYmM4MGM5ODAyYjRiZDA2MmI2Y2U5NDAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmxOdW1iZXIifSx7InZhbHVlIjoiNWNkMDQ4NjIxZDViZDY0N2E3ODg3MjI4MmJmMGEzNTM4ODY5YzYwNmFkNmE2MmEyNGNjNWFjNDEzZGFiNDY5OSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zY2FjIn0seyJ2YWx1ZSI6IjFlNTgxZjZiYjZmMzIwYmVkZGMzMWYzYTUyZjY4ZGJlMmQwZjhhYzE3ZjNmODM1NzNkZDFkOTQwZjZiOWIzMjkiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuY2Fycmllck5hbWUifSx7InZhbHVlIjoiZWM4Y2E3ZTRiYTBmYTFlYzExNGM0MTk4NTZmNmIwMmU3YmY0MDY5ZWNkYzk4MjM5OWE2OTA3MTE3ZDU5OGFjYiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC52ZXNzZWwifSx7InZhbHVlIjoiMTFiYzVlMTIzNzIxZDBjNzY0NTZlYzNmOTVmNmRkMWJhNzQ0MzBjNThmZTkwMjNiZGJkY2M1ODQ5MzIyZTQwNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC52b3lhZ2VObyJ9LHsidmFsdWUiOiI4NTgxMzhiMTQ5MmU5OTJkMTgzYzY2ZmY0ZWU2YTllNTQ4M2M3YmI3NTk3ZDBiZDc0MWEwODc5MWU5YjllNDU1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBvcnRPZkxvYWRpbmcifSx7InZhbHVlIjoiNjhlZmQ3ZjEwOTA2ZTg2YWM4MzY2ZjUzMGE1YmE3ODA4NmY0MTU5ZTM4YjNhMmZkYmVkYTJlMmY0YWJjZGQ0YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wb3J0T2ZEaXNjaGFyZ2UifSx7InZhbHVlIjoiNmIwNTQ0ODAzNzFiMWIwNDQ0MzdmZWFhZDM2YzdlNDQ3NmQzMjdlYTMwODViYzE0ZTZhY2MxNDA4MjkyYzUzNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wbGFjZU9mUmVjZWlwdCJ9LHsidmFsdWUiOiJmMTY0ZTczOWVjNTYwMGEzOWY3NzE5ZWRmNDUyOGJlZjJhM2JiYmFlN2YwYTY2MWY0MmU0Y2ViMjUzNGYzYmVjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBsYWNlT2ZEZWxpdmVyeSJ9LHsidmFsdWUiOiI2ZjFiMWI2NmRmYTNjODc4ZjY1MmE5ZTVhYWU0N2JhY2JlODM4NTRiYmVjZmVmZDc1MzJhNWQ0MjNkYzk0Y2M5IiwicGF0aCI6IkBjb250ZXh0WzBdIn0seyJ2YWx1ZSI6ImM0NmQ2OWQzMmNjYzZiMjNiNjdkODE1YzNjMWFiM2NmZGNiYmU0ZDU4OWJlMTlmNjkwYjYwNmM0Y2JlNGU0OTgiLCJwYXRoIjoiQGNvbnRleHRbMV0ifSx7InZhbHVlIjoiZGNkYzllMDgwZThlZTEyNmE5MjNkYzFjYTk0OWNmNTdhYTA1MTBkZTU3YmNhYWIzZWZjNGQ1ZTI1YmRiOTYwZCIsInBhdGgiOiJAY29udGV4dFsyXSJ9LHsidmFsdWUiOiJhYjFkN2QwNWMwOTVjODc4OTY1OTMyM2QwMjJjMzkwNWY5MTBhNjRkMWQ3ZTg0M2E5YzE4NTVlZTY1OWExYjhlIiwicGF0aCI6InR5cGVbMF0ifSx7InZhbHVlIjoiNDExOWQ3YmUxMmI3NGRkMTQ1MzFmZDIwMWU4OWM3ZGIwOTQ2OGEyMjQyODgzOTM0OWI2YjUxNzViNzNmNGZjYiIsInBhdGgiOiJ0eXBlWzFdIn0seyJ2YWx1ZSI6IjU0YmJhYzY1YTI0YWU2ZmY2ZTc4NGNlZWM4Mjk4YzI2MWNhZjMxYWM2NzUxZjgwZDFlM2I2ZGUzODY5NWZiYWIiLCJwYXRoIjoiaXNzdWFuY2VEYXRlIn0seyJ2YWx1ZSI6IjYwYjJjZGI2YmFlMjE0ZTYyZTJlOGM1ODE4NTQ4MTk3M2I2Zjg5OWRhMjM5ZmE2MTgzNzEyZDBhZTRiYjViMTMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUudHlwZSJ9LHsidmFsdWUiOiI5ZTM1NmNjNjlkMTFhZGIwZDcwZTg0YWYyYmQ3OTI3ZTg4ZmZlMTY3ZTJkMDY1OTRjNDM4NTI3MWMxZWI2Y2ZiIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLm5hbWUifSx7InZhbHVlIjoiYWEwOGNmNjJjMGNiMmYyMTkyNDU4ODZiZmM3NTUxODM1YTg5Zjg2ZjgxOWQ0YTdkODYzYmM3MzAzZmJlZGE4NiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS51cmwifSx7InZhbHVlIjoiZDhkNmZlNTk2MDk4Zjg4Y2JiYTY4ODQ0MTQzNmQ0NDJjODc0YTgyZDMyMzM0NDYyZTQ3Zjk2ODZkOTkxNTkyZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi50eXBlIn0seyJ2YWx1ZSI6ImRmOWJlNjExZjM2NmYyY2RmYmFiYThjNmE0ZGM4MjU0MjA4NjAyNmM1MmNjNGU5YmZhNzNhOTUxYWJlNjBmNDEiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YubWV0aG9kIn0seyJ2YWx1ZSI6IjdkZGI0YTIzY2U0MDRlZTA1MTU2Y2Q3YjAzZTU3YWVlM2MwMjlhZDI3ZTU4OWVjZTUwZDdjMWRlYjNkYjE2MzMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEucHJvb2YudmFsdWUifSx7InZhbHVlIjoiODk0NmYzOWFkNWI2NzEwMmYzOTMzOTRlN2JkYzVmMTAwZTMwNDI1ZTZhMjEzMDU3NGEyNDQ0OWJkMGU1YmZmNCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5yZXZvY2F0aW9uLnR5cGUifSx7InZhbHVlIjoiNzQzY2U2Y2Y1OTBkYzRmY2U0MGZlM2FhMWYzMGFkNDIwZWU4MTUyYTFiY2Y0OWNhOGNlMWVhOTgyYjE1NjhhNSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLnR5cGUifSx7InZhbHVlIjoiYTk1MDM5NzllZDNhMzA0NzZhYjgxOWM3OTQ2MDE5OTA4M2Q5NDBkMjhjN2I2MjY3MTcwMjczZGRjYjdhYjBmMCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5pZGVudGl0eVByb29mLmlkZW50aWZpZXIifSx7InZhbHVlIjoiNDVkMjFlZGYwNzYzMGQzZThjNDg3MzY0NjY1NzY0MmFhMWQ2YzMyNmI0YmUxZjkxMzFiYzA2ZDRlYTA2MmFhYiIsInBhdGgiOiJpc3N1ZXIuaWQifSx7InZhbHVlIjoiOWYzNjQwZTFkMTEyN2Y1OWYzODg0ZmIzNDc3Y2QxNTlhZTk4NDliNjFlNTYyZGVlYzdmYmY0OTgyY2Q5NjljOSIsInBhdGgiOiJpc3N1ZXIubmFtZSJ9LHsidmFsdWUiOiJhZDVmZDY3OTI5ZGI0ZjA0NzY0NmRhYzlhNTI2Yzc5NDJmMjU5MDg0ZTM4OTNjN2I1NGUyMjAwZjk5ZDExYTEwIiwicGF0aCI6Imlzc3Vlci50eXBlIn1d", + "privacy": { + "obfuscated": [] + } + } +} \ No newline at end of file diff --git a/networks/setup/polygon.mjs b/networks/setup/polygon.mjs new file mode 100644 index 000000000..2b738b037 --- /dev/null +++ b/networks/setup/polygon.mjs @@ -0,0 +1,55 @@ +import shell from "shelljs"; +import { getHDNode } from "./utils/keys.mjs"; +import { fillTemplate, extractTokenRegistryAddress, extractDomainName, getMerkleRoots } from "./utils/template.mjs"; + +const oaCLI_PATH = "open-attestation"; + +// Network Specific +const standalone = false ? "--standalone" : ""; +const OACLINetwork = "maticmum" +const ChainInfo = { + $CHAIN: "MATIC", + $CHAINID: "80001", +} + +// Keys && Address +const mnemonic = process.env.POLYGON_MNEMONIC; +if (!mnemonic) { + throw new Error(`MNEMONIC not found: ${mnemonic}`); +} +const wallets = getHDNode(mnemonic); +const ACCOUNT_KEY = wallets[0].privateKey; +const ADDRESS_EXAMPLE_1 = wallets[0].address; + +// const tokenRegistryFactoryOutput = shell.exec(`${oaCLI_PATH} deploy title-escrow-factory -n ${OACLINetwork} -k ${ACCOUNT_KEY}`, { +// silent: true, +// }); +// const TITLE_ESCROW_FACTORY_ADDRESS = extractTokenRegistryFactoryAddress(tokenRegistryFactoryOutput); + +const tokenRegistryOutput = shell.exec( + // `${oaCLI_PATH} deploy token-registry "DEMO TOKEN REGISTRY" DTR -n ${OACLINetwork} -k ${ACCOUNT_KEY} ${standalone} --factoryAddress ${TITLE_ESCROW_FACTORY_ADDRESS}`, + `${oaCLI_PATH} deploy token-registry "DEMO TOKEN REGISTRY" DTR -n ${OACLINetwork} -k ${ACCOUNT_KEY} ${standalone}`, + { silent: true } +); +const TOKEN_REGISTRY_ADDRESS = extractTokenRegistryAddress(tokenRegistryOutput); +const dnsCreateOutput = shell.exec(`${oaCLI_PATH} dns txt-record create -a ${TOKEN_REGISTRY_ADDRESS} --networkId ${ChainInfo['$CHAINID']}`, +{ silent: true }); +const DOMAIN_NAME = extractDomainName(dnsCreateOutput); +fillTemplate("polygon", { $TOKENREGISTRYADDRESS: TOKEN_REGISTRY_ADDRESS, $DOMAINNAME: DOMAIN_NAME, ...ChainInfo }); +shell.exec(`${oaCLI_PATH} wrap ${"networks/fixtures/polygon/unwrapped/"} --oav3 --output-dir ${"networks/fixtures/polygon/wrapped/"} --batched false`, +{ silent: true }) +const merkleRoots = getMerkleRoots("polygon") + +const defaultToken = { + accountKey: ACCOUNT_KEY, + tokenRegistryAddress: TOKEN_REGISTRY_ADDRESS, + owner: ADDRESS_EXAMPLE_1, + holder: ADDRESS_EXAMPLE_1, +}; + +merkleRoots.forEach((hash) => { + shell.exec( + `${oaCLI_PATH} token-registry issue --beneficiary ${defaultToken.owner} --holder ${defaultToken.holder} --address ${defaultToken.tokenRegistryAddress} --tokenId ${hash} -n ${OACLINetwork} -k ${defaultToken.accountKey}`, + { silent: true } + ); +}); diff --git a/networks/setup/utils/keys.mjs b/networks/setup/utils/keys.mjs new file mode 100644 index 000000000..44fb43915 --- /dev/null +++ b/networks/setup/utils/keys.mjs @@ -0,0 +1,22 @@ +import { utils } from 'ethers'; + +// interface WalletKeys { +// address: string; +// privateKey: string; +// publicKey: string; +// } + +// process.env.MNEMONIC +export const getHDNode = (mnemonic, count = 10) => { + const hdNode = utils.HDNode.fromMnemonic(mnemonic) // HDNode + const walletList = []; // WalletKeys[] + for (let i = 0; i < count; i++) { + const wallet = hdNode.derivePath(`${utils.defaultPath}${i}`) // HDNode + walletList.push({ + address: wallet.address, + privateKey: wallet.privateKey, + publicKey: wallet.publicKey, + }); //WalletKeys + } + return walletList; // WalletKeys[] +}; diff --git a/networks/setup/utils/template.mjs b/networks/setup/utils/template.mjs new file mode 100644 index 000000000..e455f9273 --- /dev/null +++ b/networks/setup/utils/template.mjs @@ -0,0 +1,54 @@ +import fs from 'fs'; + +const fixturesDirectory = "networks/fixtures/" +const referenceDirectory = `${fixturesDirectory}reference/` +const templateFiles = ["ebl-endorse-owner.json", "ebl-nominate-owner.json", "ebl-surrender.json", "ebl-transfer-holder.json"]; + +export const fillTemplate = (network, data) => { + for (const templateFile of templateFiles) { + let jsonString = fs.readFileSync(`${referenceDirectory}${templateFile}`, 'utf8'); + for(const dataKey in data) { + jsonString = jsonString.split(`"${dataKey}"`).join(`"${data[dataKey]}"`); // TODO: RIP Perf + } + fs.writeFileSync(`${fixturesDirectory}${network}/unwrapped/${templateFile}`, jsonString, 'utf8'); + } +} + +export const getMerkleRoots = (network) => { + const merkleRoots = []; + for (const templateFile of templateFiles) { + let jsonString = fs.readFileSync(`${fixturesDirectory}${network}/wrapped/${templateFile}`, 'utf8'); + const wrappedJSON = JSON.parse(jsonString); + merkleRoots.push(wrappedJSON.proof.merkleRoot); + } + return merkleRoots; +} + +export const extractTokenRegistryFactoryAddress = (result) => + extractText(result, [["✔ success Title escrow factory deployed at ",""], ["",""]]); + +export const extractDomainName = (result) => { + const content = extractText(result, [["✔ success Record created at ", ""], [" and will stay valid until ",";"]]); + const domainName = content.split(";")[0]; + return domainName; +} + + +export const extractTokenRegistryAddress = (result) => + extractText(result, [["✔ success Token registry deployed at ",""], ["",""]]); + +export const extractText = (result, query) => { + const front = query[0]; + const back = query[1]; + + const splitResults = result.trim().split("\n"); + for (let count = 0; count < splitResults.length; count++) { + const line = splitResults[count].trim(); + const containsQueriedString = line.includes(front[0]) && line.includes(back[0]); + if (containsQueriedString) { + const address = line.replace(front[0], front[1]).replace(back[0], back[1]); + return address.trim(); + } + } + throw new Error("Could not find address"); +}; \ No newline at end of file diff --git a/networks/setup/xdcapothem.mjs b/networks/setup/xdcapothem.mjs new file mode 100644 index 000000000..281965b88 --- /dev/null +++ b/networks/setup/xdcapothem.mjs @@ -0,0 +1,63 @@ +// require('dotenv').config({ path: __dirname+'/.env' }); +import shell from "shelljs"; +import { getHDNode } from "./utils/keys.mjs"; +import { fillTemplate, extractTokenRegistryAddress, extractDomainName, getMerkleRoots } from "./utils/template.mjs"; + +const oaCLI_PATH = "open-attestation"; + +// Network Specific +const standalone = true ? "--standalone" : ""; +const OACLINetwork = "xdcapothem"; +const ChainInfo = { + $CHAIN: "XDC", + $CHAINID: "51", +}; + +// Keys && Address +const mnemonic = process.env.SECRET_WORDS; +if (!mnemonic) { + throw new Error(`MNEMONIC not found: ${mnemonic}`); +} +const wallets = getHDNode(mnemonic); +const ACCOUNT_KEY = wallets[0].privateKey; +const ADDRESS_EXAMPLE_1 = wallets[0].address; +shell.exec(`which ${oaCLI_PATH}`) +// const tokenRegistryFactoryOutput = shell.exec(`${oaCLI_PATH} deploy title-escrow-factory -n ${OACLINetwork} -k ${ACCOUNT_KEY}`, { +// silent: true, +// }); +// const TITLE_ESCROW_FACTORY_ADDRESS = extractTokenRegistryFactoryAddress(tokenRegistryFactoryOutput); + +const tokenRegistryOutput = shell.exec( + // `${oaCLI_PATH} deploy token-registry "DEMO TOKEN REGISTRY" DTR -n ${OACLINetwork} -k ${ACCOUNT_KEY} ${standalone} --factoryAddress ${TITLE_ESCROW_FACTORY_ADDRESS}`, + `${oaCLI_PATH} deploy token-registry "DEMO TOKEN REGISTRY" DTR -n ${OACLINetwork} -k ${ACCOUNT_KEY} ${standalone}` + // { silent: true } +); +const TOKEN_REGISTRY_ADDRESS = extractTokenRegistryAddress(tokenRegistryOutput); +console.log(`Token Registry Address: ${TOKEN_REGISTRY_ADDRESS}`); +const dnsCreateOutput = shell.exec( + `${oaCLI_PATH} dns txt-record create -a ${TOKEN_REGISTRY_ADDRESS} --networkId ${ChainInfo["$CHAINID"]}` + // { silent: true } +); +const DOMAIN_NAME = extractDomainName(dnsCreateOutput); +console.log(`Domain Name: ${DOMAIN_NAME}`); +fillTemplate("xdcapothem", { $TOKENREGISTRYADDRESS: TOKEN_REGISTRY_ADDRESS, $DOMAINNAME: DOMAIN_NAME, ...ChainInfo }); +shell.exec( + `${oaCLI_PATH} wrap ${"networks/fixtures/xdcapothem/unwrapped/"} --oav3 --output-dir ${"networks/fixtures/xdcapothem/wrapped/"} --batched false`, + // { silent: true } +); +const merkleRoots = getMerkleRoots("xdcapothem"); +console.log(`Merkle Roots: ${merkleRoots}`); + +const defaultToken = { + accountKey: ACCOUNT_KEY, + tokenRegistryAddress: TOKEN_REGISTRY_ADDRESS, + owner: ADDRESS_EXAMPLE_1, + holder: ADDRESS_EXAMPLE_1, +}; +console.log(`Default Token: ${JSON.stringify(defaultToken)}`); +merkleRoots.forEach((hash) => { + shell.exec( + `${oaCLI_PATH} token-registry issue --beneficiary ${defaultToken.owner} --holder ${defaultToken.holder} --address ${defaultToken.tokenRegistryAddress} --tokenId ${hash} -n ${OACLINetwork} -k ${defaultToken.accountKey}`, + { silent: true } + ); +}); diff --git a/networks/specs/polygon/0.setup.spec.js b/networks/specs/polygon/0.setup.spec.js new file mode 100644 index 000000000..f0045f2f5 --- /dev/null +++ b/networks/specs/polygon/0.setup.spec.js @@ -0,0 +1,21 @@ +describe("Setup", () => { + it("should setup network and accounts", () => { + // Import Account + const ACCOUNT_2_PK = Cypress.env("ACCOUNT_2_PK"); // Access Environment Variable CYPRESS_ACCOUNT_2_PK + cy.importMetamaskAccount(ACCOUNT_2_PK); + cy.switchMetamaskAccount(1); + + // Add network details + const networkDetails = { + networkName: 'Polygon Mumbai', + rpcUrl: 'https://polygon-mumbai.g.alchemy.com/v2/QSv6dciCkBm2dwLyCOsJwqqwM-tJzP3m', + chainId: '80001', + symbol: 'MATIC', + blockExplorer: 'https://mumbai.polygonscan.com', + isTestnet: true + } + cy.addMetamaskNetwork(networkDetails) + console.log(process.env) + cy.log(process.env) + }); +}); diff --git a/networks/specs/polygon/1.endorse-owner-holder.spec.js b/networks/specs/polygon/1.endorse-owner-holder.spec.js new file mode 100644 index 000000000..267c0efea --- /dev/null +++ b/networks/specs/polygon/1.endorse-owner-holder.spec.js @@ -0,0 +1,23 @@ +import { ACCOUNT_3 } from "./addresses"; + +describe("Endorse Transfer of Ownership/Holdership", () => { + it("should endorse transfer of both owner and holder successfully", () => { + cy.visit("/verify"); + cy.wait(10000); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-endorse-owner.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(true); // approve all accounts to application once after connect to wallet, subsequent tests no longer need `true` + cy.get("[data-testid='endorseTransferDropdown']").click(); // Endorse Transfer of Ownership/Holdership + cy.get("[data-testid='editable-input-owner']").clear(); + cy.get("[data-testid='editable-input-holder']").clear(); + cy.get("[data-testid='editable-input-owner']").type(ACCOUNT_3); + cy.get("[data-testid='editable-input-holder']").type(ACCOUNT_3); + cy.get("[data-testid='endorseTransferBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-owner']").should("have.text", ACCOUNT_3); + cy.get("[data-testid='non-editable-input-owner']").should("have.text", ACCOUNT_3); + cy.get("[data-testid='overlay-title']").should("have.text", "Endorse Ownership/Holdership Success"); + }); +}); diff --git a/networks/specs/polygon/2.mumbai.spec.js b/networks/specs/polygon/2.mumbai.spec.js new file mode 100644 index 000000000..126e6598d --- /dev/null +++ b/networks/specs/polygon/2.mumbai.spec.js @@ -0,0 +1,48 @@ +import { ACCOUNT_1, ACCOUNT_2, ACCOUNT_3, ORIGIN_ACCOUNT } from "./addresses"; + +describe("Reading of Mumbai Network", () => { + it("should be able to view escrow information", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/ebl-mumbai.json"); + cy.get("[data-testid=issue-status]").should("have.text", `Document has been issued`); + cy.get("[data-testid=identity-status]").should("have.text", `Document issuer has been identified`); + cy.get("[data-testid=hash-status]").should("have.text", `Document has not been tampered with`); + cy.get("[data-testid='asset-title-owner']").should("have.text", `Owner:${ORIGIN_ACCOUNT}`); + cy.get("[data-testid='asset-title-holder']").should("have.text", `Holder:${ORIGIN_ACCOUNT}`); + }); + + it("should be able to view surrendered escrow information", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/ebl-mumbai-surrendered.json"); + cy.get("[id=surrendered-sign]").should("be.visible"); + cy.get("[id=endorsement-chain-button]").click(); + cy.wait(60000); + + cy.get("[data-testid='row-event-0'] [data-testid='action-title']").should("have.text", "Document has been issued"); + cy.get("[data-testid='row-event-0'] [data-testid='row-event-Owner']").should("have.text", `Owner${ORIGIN_ACCOUNT}`); + cy.get("[data-testid='row-event-0'] [data-testid='row-event-Holder']").should("have.text", `Holder${ORIGIN_ACCOUNT}`); + + cy.get("[data-testid='row-event-1'] [data-testid='action-title']").should("have.text", "Change Owners"); + cy.get("[data-testid='row-event-1'] [data-testid='row-event-Owner']").should("have.text", `Owner${ACCOUNT_1}`); + cy.get("[data-testid='row-event-1'] [data-testid='row-event-Holder']").should("have.text", `Holder${ACCOUNT_1}`); + + cy.get("[data-testid='row-event-2'] [data-testid='action-title']").should("have.text", "Transfer holdership"); + cy.get("[data-testid='row-event-2'] [data-testid='row-event-Holder']").should("have.text", `Holder${ACCOUNT_2}`); + + cy.get("[data-testid='row-event-3'] [data-testid='action-title']").should("have.text", "Endorse change of ownership"); + cy.get("[data-testid='row-event-3'] [data-testid='row-event-Owner']").should("have.text", `Owner${ACCOUNT_3}`); + + cy.get("[data-testid='row-event-4'] [data-testid='action-title']").should("have.text", "Transfer holdership"); + cy.get("[data-testid='row-event-4'] [data-testid='row-event-Holder']").should("have.text", `Holder${ACCOUNT_3}`); + + cy.get("[data-testid='row-event-5'] [data-testid='action-title']").should("have.text", "Document surrendered to issuer"); + + cy.get("[data-testid='row-event-6'] [data-testid='action-title']").should("have.text", "Surrender of document rejected"); + cy.get("[data-testid='row-event-6'] [data-testid='row-event-Owner']").should("have.text", `Owner${ACCOUNT_3}`); + cy.get("[data-testid='row-event-6'] [data-testid='row-event-Holder']").should("have.text", `Holder${ACCOUNT_3}`); + + cy.get("[data-testid='row-event-7'] [data-testid='action-title']").should("have.text", "Document surrendered to issuer"); + + cy.get("[data-testid='row-event-8'] [data-testid='action-title']").should("have.text", "Surrender of document accepted"); + }); +}); \ No newline at end of file diff --git a/networks/specs/polygon/3.nominate-owner.spec.js b/networks/specs/polygon/3.nominate-owner.spec.js new file mode 100644 index 000000000..f1e437ba5 --- /dev/null +++ b/networks/specs/polygon/3.nominate-owner.spec.js @@ -0,0 +1,56 @@ +// TO CHECK +import { ACCOUNT_1, ACCOUNT_2, ACCOUNT_3 } from "./addresses"; + +describe("Transfer Owner", () => { + it("should go to verify page, upload a file, connect to wallet and transfer holder successfully", () => { + cy.switchMetamaskAccount(1); + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-nominate-owner.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='transferHolderDropdown']").click(); // Transfer Holdership + cy.get("[data-testid='editable-input-holder']").type(ACCOUNT_2); + cy.get("[data-testid='transferBtn']").click(); + cy.wait(10000) + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-holder']").should("have.text", ACCOUNT_2); + cy.get("[data-testid='overlay-title']").should("have.text", "Transfer Holder Success"); + }); + + context("Nominate Owner", () => { + it("should go to verify page, upload a file, connect to wallet and nominate owner successfully", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-nominate-owner.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='nominateBeneficiaryHolderDropdown']").click(); // Nominate Change of Ownership + cy.get("[data-testid='editable-input-owner']").type(ACCOUNT_3); + cy.get("[data-testid='nominationBtn']").click(); + cy.wait(10000) + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-owner']").should("have.text", ACCOUNT_1); + cy.get("[data-testid='overlay-title']").should("have.text", "Nomination Success"); + }); + }); + + context("Accept Nominated Owner", () => { + it("should go to verify page, upload a file, connect a wallet and endorse nominated owner successfully", () => { + cy.switchMetamaskAccount(2); // switch to account 2 (holder) + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-nominate-owner.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='endorseBeneficiaryDropdown']").click(); // Endorse Change of Ownership + cy.get("[data-testid='non-editable-input-nominee']").should("have.text", ACCOUNT_3); + cy.get("[data-testid='endorseBtn']").click(); + cy.wait(10000) + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-owner']").should("have.text", ACCOUNT_3); + cy.get("[data-testid='non-editable-input-holder']").should("have.text", ACCOUNT_2); + cy.get("[data-testid='overlay-title']").should("have.text", "Change Owner Success"); + }); + }); +}); diff --git a/networks/specs/polygon/4.surrender-1-reject.spec.js b/networks/specs/polygon/4.surrender-1-reject.spec.js new file mode 100644 index 000000000..a86f4a5f0 --- /dev/null +++ b/networks/specs/polygon/4.surrender-1-reject.spec.js @@ -0,0 +1,33 @@ +describe("Surrender-Reject", () => { + context("Surrender", () => { + it("should go to verify page, upload a file, connect to wallet and surrender a document successfully", () => { + cy.switchMetamaskAccount(1); // need to switch to or make sure it is at account 1 as sometimes it will fail when not in account 1 + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-surrender.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='surrenderDropdown']").click(); // Surrender Document + cy.get("[data-testid='surrenderBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='overlay-title']").should("have.text", "Surrender Document Success"); + cy.get("#surrender-sign").should("have.text", "Surrendered To Issuer"); + }); + }); + + context("Reject Surrender", () => { + it("should go to verify page, upload a file, connect to wallet and reject the surrendered document successfully", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-surrender.json"); + cy.get("[data-testid='surrenderToIssuer']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='rejectSurrenderDropdown']").click(); // Reject Surrender + cy.get("[data-testid='rejectSurrenderBtn']").click(); + cy.get("[data-testid='confirmActionBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='overlay-title']").should("have.text", "Surrender Rejected"); + }); + }); +}); diff --git a/networks/specs/polygon/5.surrender-2-accept.spec.js b/networks/specs/polygon/5.surrender-2-accept.spec.js new file mode 100644 index 000000000..06d9ea2ba --- /dev/null +++ b/networks/specs/polygon/5.surrender-2-accept.spec.js @@ -0,0 +1,32 @@ +describe("Surrender-Accept", () => { + context("Surrender", () => { + it("should go to verify page, upload a file, connect to wallet and surrender a document successfully", () => { + cy.switchMetamaskAccount(1); // need to switch to or make sure it is at account 1 as sometimes it will fail when not in account 1 + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-surrender.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='surrenderDropdown']").click(); // Surrender Document + cy.get("[data-testid='surrenderBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("#surrender-sign").should("have.text", "Surrendered To Issuer"); + cy.get("[data-testid='overlay-title']").should("have.text", "Surrender Document Success"); + }); + }); + + context("Accept Surrender", () => { + it("should go to verify page, upload a file, connect to wallet and accept the surrendered document successfully", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-surrender.json"); + cy.get("[data-testid='surrenderToIssuer']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='acceptSurrenderDropdown']").click(); // Accept Surrender + cy.get("[data-testid='acceptSurrenderBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='overlay-title']").should("have.text", "Surrender Accepted"); + }); + }); +}); diff --git a/networks/specs/polygon/6.transfer-holder.spec.js b/networks/specs/polygon/6.transfer-holder.spec.js new file mode 100644 index 000000000..026305116 --- /dev/null +++ b/networks/specs/polygon/6.transfer-holder.spec.js @@ -0,0 +1,19 @@ +import { ACCOUNT_2 } from "./addresses"; + +describe("Transfer Holder", () => { + it("should go to verify page, upload a file, connect to wallet and transfer holder successfully", () => { + cy.switchMetamaskAccount(1); + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("polygon/wrapped/ebl-transfer-holder.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='transferHolderDropdown']").click(); // Transfer Holdership + cy.get("[data-testid='editable-input-holder']").type(ACCOUNT_2); + cy.get("[data-testid='transferBtn']").click(); + cy.wait(10000) + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-holder']").should("have.text", ACCOUNT_2); + cy.get("[data-testid='overlay-title']").should("have.text", "Transfer Holder Success"); + }); +}); diff --git a/networks/specs/polygon/addresses.js b/networks/specs/polygon/addresses.js new file mode 100644 index 000000000..60fc6d471 --- /dev/null +++ b/networks/specs/polygon/addresses.js @@ -0,0 +1,4 @@ +export const ACCOUNT_1 = "0xe0A71284EF59483795053266CB796B65E48B5124"; +export const ACCOUNT_2 = "0xcDFAcbb428DD30ddf6d99875dcad04CbEFcd6E60"; +export const ACCOUNT_3 = "0x391aFf3942857a10958425FebF1fC1938D9F5AE7"; +export const ORIGIN_ACCOUNT = "0x8d366250A96deBE81C8619459a503a0eEBE33ca6" \ No newline at end of file diff --git a/networks/specs/xdcapothem/addresses.js b/networks/specs/xdcapothem/addresses.js new file mode 100644 index 000000000..b707d3fd2 --- /dev/null +++ b/networks/specs/xdcapothem/addresses.js @@ -0,0 +1,3 @@ +export const ACCOUNT_1 = "0xe0A71284EF59483795053266CB796B65E48B5124"; +export const ACCOUNT_2 = "0xcDFAcbb428DD30ddf6d99875dcad04CbEFcd6E60"; +export const ACCOUNT_3 = "0x391aFf3942857a10958425FebF1fC1938D9F5AE7"; \ No newline at end of file diff --git a/networks/specs/xdcapothem/endorse-owner-holder.spec.js b/networks/specs/xdcapothem/endorse-owner-holder.spec.js new file mode 100644 index 000000000..11acd07ee --- /dev/null +++ b/networks/specs/xdcapothem/endorse-owner-holder.spec.js @@ -0,0 +1,36 @@ +import { ACCOUNT_3 } from "./addresses"; + +before(() => { + // Import Account 2 0xcDFAcbb428DD30ddf6d99875dcad04CbEFcd6E60 + cy.importMetamaskAccount("0xc58c1ff75001afdca8cecb61b47f36964febe4188b8f7b26252286ecae5a8879"); + cy.switchMetamaskAccount(1); + cy.addMetamaskNetwork({ + networkName: 'XDC Apothem', + rpcUrl: 'https://apothem.xdcrpc.com', + chainId: '51', + symbol: 'XDC', + blockExplorer: 'https://apothem.xdcscan.io', + isTestnet: true + }) +}); + +describe("Endorse Transfer of Ownership/Holdership", () => { + it("should endorse transfer of both owner and holder successfully", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-endorse-owner.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(true); // approve all accounts to application once after connect to wallet, subsequent tests no longer need `true` + cy.get("[data-testid='endorseTransferDropdown']").click(); // Endorse Transfer of Ownership/Holdership + cy.get("[data-testid='editable-input-owner']").clear(); + cy.get("[data-testid='editable-input-holder']").clear(); + cy.get("[data-testid='editable-input-owner']").type(ACCOUNT_3); + cy.get("[data-testid='editable-input-holder']").type(ACCOUNT_3); + cy.get("[data-testid='endorseTransferBtn']").click(); + cy.wait(10000) + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-owner']").should("have.text", ACCOUNT_3); + cy.get("[data-testid='non-editable-input-owner']").should("have.text", ACCOUNT_3); + cy.get("[data-testid='overlay-title']").should("have.text", "Endorse Ownership/Holdership Success"); + }); +}); diff --git a/networks/specs/xdcapothem/nominate-owner.spec.js b/networks/specs/xdcapothem/nominate-owner.spec.js new file mode 100644 index 000000000..209649329 --- /dev/null +++ b/networks/specs/xdcapothem/nominate-owner.spec.js @@ -0,0 +1,56 @@ +// TO CHECK +import { ACCOUNT_1, ACCOUNT_2, ACCOUNT_3 } from "./addresses"; + +describe("Transfer Owner", () => { + it("should go to verify page, upload a file, connect to wallet and transfer holder successfully", () => { + cy.switchMetamaskAccount(1); + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-nominate-owner.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='transferHolderDropdown']").click(); // Transfer Holdership + cy.get("[data-testid='editable-input-holder']").type(ACCOUNT_2); + cy.get("[data-testid='transferBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-holder']").should("have.text", ACCOUNT_2); + cy.get("[data-testid='overlay-title']").should("have.text", "Transfer Holder Success"); + }); + + context("Nominate Owner", () => { + it("should go to verify page, upload a file, connect to wallet and nominate owner successfully", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-nominate-owner.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='nominateBeneficiaryHolderDropdown']").click(); // Nominate Change of Ownership + cy.get("[data-testid='editable-input-owner']").type(ACCOUNT_3); + cy.get("[data-testid='nominationBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-owner']").should("have.text", ACCOUNT_1); + cy.get("[data-testid='overlay-title']").should("have.text", "Nomination Success"); + }); + }); + + context("Accept Nominated Owner", () => { + it("should go to verify page, upload a file, connect a wallet and endorse nominated owner successfully", () => { + cy.switchMetamaskAccount(2); // switch to account 2 (holder) + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-nominate-owner.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='endorseBeneficiaryDropdown']").click(); // Endorse Change of Ownership + cy.get("[data-testid='non-editable-input-nominee']").should("have.text", ACCOUNT_3); + cy.get("[data-testid='endorseBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-owner']").should("have.text", ACCOUNT_3); + cy.get("[data-testid='non-editable-input-holder']").should("have.text", ACCOUNT_2); + cy.get("[data-testid='overlay-title']").should("have.text", "Change Owner Success"); + }); + }); +}); diff --git a/networks/specs/xdcapothem/surrender-1-reject.spec.js b/networks/specs/xdcapothem/surrender-1-reject.spec.js new file mode 100644 index 000000000..ae5f55c11 --- /dev/null +++ b/networks/specs/xdcapothem/surrender-1-reject.spec.js @@ -0,0 +1,34 @@ +describe("Surrender-Reject", () => { + + context("Surrender", () => { + it("should go to verify page, upload a file, connect to wallet and surrender a document successfully", () => { + cy.switchMetamaskAccount(1); // need to switch to or make sure it is at account 1 as sometimes it will fail when not in account 1 + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-surrender.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='surrenderDropdown']").click(); // Surrender Document + cy.get("[data-testid='surrenderBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='overlay-title']").should("have.text", "Surrender Document Success"); + cy.get("#surrender-sign").should("have.text", "Surrendered To Issuer"); + }); + }); + + context("Reject Surrender", () => { + it("should go to verify page, upload a file, connect to wallet and reject the surrendered document successfully", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-surrender.json"); + cy.get("[data-testid='surrenderToIssuer']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='rejectSurrenderDropdown']").click(); // Reject Surrender + cy.get("[data-testid='rejectSurrenderBtn']").click(); + cy.get("[data-testid='confirmActionBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='overlay-title']").should("have.text", "Surrender Rejected"); + }); + }); +}); diff --git a/networks/specs/xdcapothem/surrender-2-accept.spec.js b/networks/specs/xdcapothem/surrender-2-accept.spec.js new file mode 100644 index 000000000..99643e286 --- /dev/null +++ b/networks/specs/xdcapothem/surrender-2-accept.spec.js @@ -0,0 +1,33 @@ + +describe("Surrender-Accept", () => { + context("Surrender", () => { + it("should go to verify page, upload a file, connect to wallet and surrender a document successfully", () => { + cy.switchMetamaskAccount(1); // need to switch to or make sure it is at account 1 as sometimes it will fail when not in account 1 + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-surrender.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='surrenderDropdown']").click(); // Surrender Document + cy.get("[data-testid='surrenderBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("#surrender-sign").should("have.text", "Surrendered To Issuer"); + cy.get("[data-testid='overlay-title']").should("have.text", "Surrender Document Success"); + }); + }); + + context("Accept Surrender", () => { + it("should go to verify page, upload a file, connect to wallet and accept the surrendered document successfully", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-surrender.json"); + cy.get("[data-testid='surrenderToIssuer']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='acceptSurrenderDropdown']").click(); // Accept Surrender + cy.get("[data-testid='acceptSurrenderBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='overlay-title']").should("have.text", "Surrender Accepted"); + }); + }); +}); diff --git a/networks/specs/xdcapothem/transfer-holder.spec.js b/networks/specs/xdcapothem/transfer-holder.spec.js new file mode 100644 index 000000000..509f990fd --- /dev/null +++ b/networks/specs/xdcapothem/transfer-holder.spec.js @@ -0,0 +1,19 @@ +import { ACCOUNT_2 } from "./addresses"; + +describe("Transfer Holder", () => { + it("should go to verify page, upload a file, connect to wallet and transfer holder successfully", () => { + cy.switchMetamaskAccount(1); + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/wrapped/ebl-transfer-holder.json"); + cy.get("[data-testid='asset-title-owner']").should("be.visible"); + cy.get("[data-testid='asset-title-holder']").should("be.visible"); + cy.clickConnectAndManageAssetButton(); + cy.get("[data-testid='transferHolderDropdown']").click(); // Transfer Holdership + cy.get("[data-testid='editable-input-holder']").type(ACCOUNT_2); + cy.get("[data-testid='transferBtn']").click(); + cy.wait(10000); + cy.confirmMetamaskTransaction(); + cy.get("[data-testid='non-editable-input-holder']").should("have.text", ACCOUNT_2); + cy.get("[data-testid='overlay-title']").should("have.text", "Transfer Holder Success"); + }); +}); diff --git a/networks/specs/xdcapothem/xdcapothem.spec.js b/networks/specs/xdcapothem/xdcapothem.spec.js new file mode 100644 index 000000000..dde180d61 --- /dev/null +++ b/networks/specs/xdcapothem/xdcapothem.spec.js @@ -0,0 +1,49 @@ +import { ACCOUNT_1, ACCOUNT_2, ACCOUNT_3 } from "./addresses"; +const originAccount = "0x09C4183aC99B432c4BA78d354F8d21257bd15aaa" + +describe("Reading of XDC Apothem Network", () => { + it("should be able to view escrow information", () => { + cy.visit("/verify"); + cy.get("input[type=file]").attachFile("xdcapothem/ebl-apothem.json"); + cy.get("[data-testid=issue-status]").should("have.text", `Document has been issued`); + cy.get("[data-testid=identity-status]").should("have.text", `Document issuer has been identified`); + cy.get("[data-testid=hash-status]").should("have.text", `Document has not been tampered with`); + cy.get("[data-testid='asset-title-owner']").should("have.text", `Owner:${originAccount}`); + cy.get("[data-testid='asset-title-holder']").should("have.text", `Holder:${originAccount}`); + }); + + // it("should be able to view surrendered escrow information", () => { + // cy.visit("/verify"); + // cy.get("input[type=file]").attachFile("xdcapothem/ebl-apothem-surrendered.json"); + // cy.get("[id=surrendered-sign]").should("be.visible"); + // cy.get("[id=endorsement-chain-button]").click(); + // cy.wait(60000); + + // cy.get("[data-testid='row-event-0'] [data-testid='action-title']").should("have.text", "Document has been issued"); + // cy.get("[data-testid='row-event-0'] [data-testid='row-event-Owner']").should("have.text", `Owner${originAccount}`); + // cy.get("[data-testid='row-event-0'] [data-testid='row-event-Holder']").should("have.text", `Holder${originAccount}`); + + // cy.get("[data-testid='row-event-1'] [data-testid='action-title']").should("have.text", "Change Owners"); + // cy.get("[data-testid='row-event-1'] [data-testid='row-event-Owner']").should("have.text", `Owner${ACCOUNT_1}`); + // cy.get("[data-testid='row-event-1'] [data-testid='row-event-Holder']").should("have.text", `Holder${ACCOUNT_1}`); + + // cy.get("[data-testid='row-event-2'] [data-testid='action-title']").should("have.text", "Transfer holdership"); + // cy.get("[data-testid='row-event-2'] [data-testid='row-event-Holder']").should("have.text", `Holder${ACCOUNT_2}`); + + // cy.get("[data-testid='row-event-3'] [data-testid='action-title']").should("have.text", "Endorse change of ownership"); + // cy.get("[data-testid='row-event-3'] [data-testid='row-event-Owner']").should("have.text", `Owner${ACCOUNT_3}`); + + // cy.get("[data-testid='row-event-4'] [data-testid='action-title']").should("have.text", "Transfer holdership"); + // cy.get("[data-testid='row-event-4'] [data-testid='row-event-Holder']").should("have.text", `Holder${ACCOUNT_3}`); + + // cy.get("[data-testid='row-event-5'] [data-testid='action-title']").should("have.text", "Document surrendered to issuer"); + + // cy.get("[data-testid='row-event-6'] [data-testid='action-title']").should("have.text", "Surrender of document rejected"); + // cy.get("[data-testid='row-event-6'] [data-testid='row-event-Owner']").should("have.text", `Owner${ACCOUNT_3}`); + // cy.get("[data-testid='row-event-6'] [data-testid='row-event-Holder']").should("have.text", `Holder${ACCOUNT_3}`); + + // cy.get("[data-testid='row-event-7'] [data-testid='action-title']").should("have.text", "Document surrendered to issuer"); + + // cy.get("[data-testid='row-event-8'] [data-testid='action-title']").should("have.text", "Surrender of document accepted"); + // }); +}); \ No newline at end of file diff --git a/networks/support/commands.js b/networks/support/commands.js new file mode 100644 index 000000000..3137ac8d2 --- /dev/null +++ b/networks/support/commands.js @@ -0,0 +1,17 @@ +import "cypress-file-upload"; + +Cypress.Commands.add("clickConnectAndManageAssetButton", (acceptMetamask = false) => { + cy.get("#title-transfer-panel").then(($transferPanel) => { + cy.wait(2000); + if ($transferPanel.find("[data-testid='connectToWallet']").length) { + cy.get("[data-testid='connectToWallet']").click(); + if (acceptMetamask) { + cy.acceptMetamaskAccess({ allAccounts: true }).then((connected) => { + expect(connected).to.be.true; + }); + cy.wait(2000); + } + } + }); + cy.get("[data-testid='manageAssetDropdown']").click(); +}); diff --git a/networks/support/index.js b/networks/support/index.js new file mode 100644 index 000000000..bf5eab71e --- /dev/null +++ b/networks/support/index.js @@ -0,0 +1,2 @@ +import "./commands"; +import "@synthetixio/synpress/support"; diff --git a/networks/synpress-runfile/keys.js b/networks/synpress-runfile/keys.js new file mode 100644 index 000000000..92d4ba9c8 --- /dev/null +++ b/networks/synpress-runfile/keys.js @@ -0,0 +1,22 @@ +import { utils } from 'ethers'; + +// interface WalletKeys { +// address: string; +// privateKey: string; +// publicKey: string; +// } + +// process.env.MNEMONIC +export const getHDNode = (mnemonic, count = 10) => { + const hdNode = utils.HDNode.fromMnemonic(mnemonic) // HDNode + const walletList = []; // WalletKeys[] + for (let i = 0; i < count; i++) { + const wallet = hdNode.derivePath(`${utils.defaultPath}${i}`) // HDNode + walletList.push({ + address: wallet.address, + privateKey: wallet.privateKey, + publicKey: wallet.publicKey, + }); //WalletKeys + } + return walletList; // WalletKeys[] +}; \ No newline at end of file diff --git a/networks/synpress-runfile/polygon.config.js b/networks/synpress-runfile/polygon.config.js new file mode 100644 index 000000000..1f88be895 --- /dev/null +++ b/networks/synpress-runfile/polygon.config.js @@ -0,0 +1,70 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { defineConfig } from "cypress" +// import setupNodeEvents from "./cypress/plugins" +// const setupNodeEvents = require(pluginsPath); +// const synpressPath = getSynpressPath(); +// log(`Detected synpress root path is: ${synpressPath}`); +// const pluginsPath = `${synpressPath}/plugins/index`; +// log(`Detected synpress plugin path is: ${pluginsPath}`); +// const setupNodeEvents = require('@synthetixio/synpress/plugins'); +// import setupNodeEvents from '@synthetixio/synpress/plugins/index' +// const synpressPlugins = require('@synthetixio/synpress/plugins'); +// const log = require('debug')('synpress:config'); +// const path = require('path'); +// const packageJson = require('./package.json'); +// const { defineConfig } = require('cypress'); +// const fixturesFolder = `${synpressPath}/fixtures`; +// log(`Detected synpress fixtures path is: ${fixturesFolder}`); +// const supportFile = 'tests/e2e/support.js'; + +const setupNodeEvents = require('@synthetixio/synpress/plugins'); +const { getHDNode } = require('./keys'); + +const fixturesFolder = 'networks/fixtures'; +const supportFile = 'networks/support/index.js'; +const specPattern = 'networks/specs/polygon/**.spec.js'; +const video = false; +const screenshotOnRunFailure = false; +const testIsolation = true; +const baseUrl = 'http://localhost:3000'; +const SECRET_WORDS = process.env.SECRET_WORDS; +const ACCOUNT_2_PK = getHDNode(SECRET_WORDS)[1].privateKey; + +module.exports = defineConfig({ + userAgent: 'synpress', + retries: { + runMode: process.env.CI ? 2 : 0, + openMode: 0, + }, + fixturesFolder, + // screenshotsFolder: 'tests/e2e/screenshots', + // videosFolder: 'tests/e2e/videos', + chromeWebSecurity: true, + viewportWidth: 1920, + viewportHeight: 1080, + video, + screenshotOnRunFailure, + env: { + coverage: false, + CYPRESS_RESOURCES_WAIT: 1, + STABLE_MODE: true, + NETWORK_NAME:'sepolia', + ACCOUNT_2_PK, + }, + // defaultCommandTimeout: process.env.SYNDEBUG ? 9999999 : 30000, + // pageLoadTimeout: process.env.SYNDEBUG ? 9999999 : 30000, + // requestTimeout: process.env.SYNDEBUG ? 9999999 : 30000, + e2e: { + testIsolation, + setupNodeEvents, + baseUrl, + // specPattern: 'tests/e2e/specs/**/*.{js,jsx,ts,tsx}', + specPattern, + supportFile, + }, + // component: { + // setupNodeEvents, + // specPattern: './**/*spec.{js,jsx,ts,tsx}', + // supportFile, + // }, +}); \ No newline at end of file diff --git a/networks/synpress.config.js b/networks/synpress.config.js new file mode 100644 index 000000000..eebcc6311 --- /dev/null +++ b/networks/synpress.config.js @@ -0,0 +1,79 @@ +// { +// "supportFile":"networks/support/index.js", +// "fixturesFolder":"networks/fixtures", +// "video":false, +// "screenshotOnRunFailure":false, +// "e2e": { +// "testIsolation": true, +// "specPattern": "networks/specs/**/*.spec.js" +// } +// } + + +// const log = require('debug')('synpress:config'); +// const path = require('path'); +// const packageJson = require('./package.json'); +const { defineConfig } = require('cypress'); +// const synpressPath = getSynpressPath(); +// log(`Detected synpress root path is: ${synpressPath}`); +// const pluginsPath = `${synpressPath}/plugins/index`; +// log(`Detected synpress plugin path is: ${pluginsPath}`); +// const setupNodeEvents = require(pluginsPath); +// const fixturesFolder = `${synpressPath}/fixtures`; +// const fixturesFolder = `networks/fixtures`; +// log(`Detected synpress fixtures path is: ${fixturesFolder}`); +// const supportFile = 'networks/support/index.js'; + +module.exports = defineConfig( + { + "supportFile":"networks/support/index.js", + "fixturesFolder":"networks/fixtures", + "video":false, + "screenshotOnRunFailure":false, + "e2e": { + "testIsolation": true, + "specPattern": "networks/specs/**/*.spec.js" + } + } +// { +// userAgent: 'synpress', +// video: false, +// retries: { +// runMode: process.env.CI ? 1 : 0, +// openMode: 0, +// }, +// fixturesFolder, +// screenshotsFolder: 'tests/e2e/screenshots', +// videosFolder: 'tests/e2e/videos', +// chromeWebSecurity: true, +// viewportWidth: 1920, +// viewportHeight: 1080, +// env: { +// coverage: false, +// }, +// defaultCommandTimeout: process.env.SYNDEBUG ? 9999999 : 30000, +// pageLoadTimeout: process.env.SYNDEBUG ? 9999999 : 30000, +// requestTimeout: process.env.SYNDEBUG ? 9999999 : 30000, +// e2e: { +// testIsolation: true, +// setupNodeEvents, +// baseUrl: 'http://localhost:3000', +// "specPattern": "networks/specs/**/*.spec.{js,jsx,ts,tsx}", +// supportFile, +// }, +// component: { +// setupNodeEvents, +// specPattern: './**/*spec.{js,jsx,ts,tsx}', +// supportFile, +// }, +// } + +); + +// function getSynpressPath() { +// if (process.env.SYNPRESS_LOCAL_TEST) { +// return '.'; +// } else { +// return path.dirname(require.resolve(packageJson.name)); +// } +// } \ No newline at end of file diff --git a/networks/tsconfig.json b/networks/tsconfig.json new file mode 100644 index 000000000..fd1ce7966 --- /dev/null +++ b/networks/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "allowJs": true, + "baseUrl": "../../node_modules", + "types": ["cypress", "@synthetixio/synpress/support", "cypress-wait-until", "@testing-library/cypress"], + "outDir": "./output" + }, + "include": ["**/*.*"] +} diff --git a/package-lock.json b/package-lock.json index ccaf0309a..72e60ee4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3494,6 +3494,16 @@ "web-did-resolver": "^2.0.4" }, "dependencies": { + "@govtechsg/dnsprove": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@govtechsg/dnsprove/-/dnsprove-2.6.1.tgz", + "integrity": "sha512-ALLe3EC9ix6ZsMIHgRRLdVYMC35yRShG8sRXb73D4bvw60Yz/pT/Y3e9w40KqG8HMMChvJaEMV6uQi6GR7Jwmw==", + "requires": { + "axios": "^0.21.1", + "debug": "^4.3.1", + "runtypes": "^6.3.0" + } + }, "axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -4344,6 +4354,40 @@ "integrity": "sha512-mbLEGkE6Y9yJhkeHjLiM/oDyXF1PVnHqiyaonbWylq0lOf9Wbuhs6cjqKdfDyNlsg/mAhLSysyQnz7GyNVW/Zg==", "requires": { "@govtechsg/oa-verify": "^8.1.0" + }, + "dependencies": { + "@govtechsg/oa-verify": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@govtechsg/oa-verify/-/oa-verify-8.1.0.tgz", + "integrity": "sha512-thRrRUr3XIODrGaKW+LOQikKAd5a4bkIH7rAe76VstF1j+PL62tCAXDvFFCGgJJOBTeSlkXQCANmzbZW81TrCg==", + "requires": { + "@govtechsg/dnsprove": "^2.6.0", + "@govtechsg/document-store": "^2.2.3", + "@govtechsg/open-attestation": "^6.2.0", + "@govtechsg/token-registry": "^4.1.2", + "axios": "^0.21.4", + "debug": "^4.3.1", + "did-resolver": "^3.1.0", + "ethers": "^5.1.4", + "ethr-did-resolver": "^4.3.3", + "node-cache": "^5.1.2", + "runtypes": "^6.3.0", + "web-did-resolver": "^2.0.4" + } + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + } } }, "@hapi/hoek": { @@ -10762,7 +10806,8 @@ "@types/html-minifier-terser": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true }, "@types/http-cache-semantics": { "version": "4.0.1", @@ -12281,9 +12326,9 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-sequence-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", - "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==" }, "ansi-styles": { "version": "3.2.1", @@ -15954,6 +15999,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, "requires": { "source-map": "~0.6.0" }, @@ -15961,7 +16007,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -24538,6 +24585,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, "requires": { "camel-case": "^4.1.1", "clean-css": "^4.2.3", @@ -24551,7 +24599,8 @@ "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true } } }, @@ -25163,9 +25212,9 @@ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -25181,7 +25230,7 @@ "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -25226,6 +25275,16 @@ "requires": { "has-flag": "^4.0.0" } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } } } }, @@ -32011,6 +32070,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, "requires": { "lodash": "^4.17.20", "renderkid": "^2.0.4" @@ -33516,6 +33576,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, "requires": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -33527,12 +33588,14 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -35521,6 +35584,7 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -35529,7 +35593,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -37449,7 +37514,8 @@ "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true }, "tape": { "version": "4.16.2", @@ -37625,6 +37691,7 @@ "version": "4.8.0", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -37634,12 +37701,14 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, diff --git a/package.json b/package.json index 182f7b718..2aa618c7b 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,13 @@ "integration:synpress": "cross-env CYPRESS_RESOURCES_WAIT=1 STABLE_MODE=true SECRET_WORDS='indicate swing place chair flight used hammer soon photo region volume shuffle' NETWORK_NAME='localhost' synpress run --config supportFile='tests/e2e/support/index.js',fixturesFolder='tests/e2e/fixtures',video=false,screenshotOnRunFailure=false,retries=1", "integration:local": "cross-env NET=local npm run dev", "integration:headful": "concurrently -k -s first \"npm:blockchain\" \"npm:integration:local\" \"npm:integration:metamask\"", + "network:dev": "cross-env NET=goerli npm run dev", + "network:polygon:setup": "node --experimental-modules ./networks/setup/polygon.mjs", + "network:xdcapothem:setup": "node --experimental-modules ./networks/setup/xdcapothem.mjs", + "network:polygon:synpress": "synpress run --configFile networks/synpress-runfile/polygon.config.js", + "network:xdcapothem:synpress": "cross-env CYPRESS_RESOURCES_WAIT=1 STABLE_MODE=true NETWORK_NAME='sepolia' synpress run --config supportFile='networks/support/index.js',fixturesFolder='networks/fixtures',video=false,screenshotOnRunFailure=false,testIsolation=true,specPattern='networks/specs/xdcapothem/surrender-1-reject.spec.js'", + "network:polygon:headful": "SECRET_WORDS='indicate swing place chair flight used hammer soon photo region volume shuffle' CYPRESS_RESOURCES_WAIT=1 STABLE_MODE=true NETWORK_NAME='sepolia' npm run network:polygon:setup && concurrently -k -s first \"npm:network:polygon:synpress\" \"npm:network:dev\"", + "network:xdcapothem:headful": "npm run network:xdcapothem:setup && concurrently -k -s first \"npm:network:xdcapothem:synpress\" \"npm:network:dev\"", "lint": "eslint ./src --ext .js,.ts,.tsx --max-warnings 0", "lint:fix": "npm run lint -- --fix", "prep": "run-s lint:fix test integration:testcafe:dev integration:headful", @@ -53,7 +60,7 @@ "@govtechsg/oa-encryption": "^1.3.3", "@govtechsg/oa-verify": "^8.2.0", "@govtechsg/open-attestation": "^6.5.0", - "@govtechsg/open-attestation-cli": "^2.5.0", + "@govtechsg/open-attestation-cli": "^2.5.2", "@govtechsg/open-attestation-utils": "^1.0.9", "@govtechsg/token-registry": "^4.1.7", "@govtechsg/tradetrust-ui-components": "^2.19.2", diff --git a/src/components/DocumentStatus/StatusChecks.tsx b/src/components/DocumentStatus/StatusChecks.tsx index 2e8de8dc3..aed533285 100644 --- a/src/components/DocumentStatus/StatusChecks.tsx +++ b/src/components/DocumentStatus/StatusChecks.tsx @@ -13,13 +13,13 @@ export const StatusChecks: FunctionComponent = ({ verificatio return (
-
+
-
+
-
+