diff --git a/.github/workflows/e2e-verify.yml b/.github/workflows/e2e-verify.yml new file mode 100644 index 0000000..33c2083 --- /dev/null +++ b/.github/workflows/e2e-verify.yml @@ -0,0 +1,78 @@ +name: E2E Verification Tests + +on: + pull_request: + branches: [main, develop] + workflow_dispatch: + +# Read-only document verification suite (OA + W3C VC). No MetaMask, runs headless. +jobs: + e2e-verify: + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Install Playwright browsers + run: npx playwright install chromium --with-deps + + # ── Local chain + contracts ────────────────────────────────────────── + - name: Start Hardhat node + run: npx hardhat node & + env: + NODE_OPTIONS: --max-old-space-size=4096 + + - name: Wait for Hardhat node + run: npx wait-on http://127.0.0.1:8545 --timeout 180000 + + # Token registry (token-registry fixtures) + document store (doc-store fixtures) + - name: Deploy contracts and mint tokens + run: node e2e/setup-contracts.cjs + + - name: Deploy document store + run: node e2e/setup-document-store.cjs + + # ── Dev server ─────────────────────────────────────────────────────── + - name: Start dev server + run: npm run dev & + env: + VITE_APP_NETWORK: local + VITE_NETWORK_TYPE: testnet + VITE_RPC_URL_1337: http://127.0.0.1:8545 + + - name: Wait for dev server + run: npx wait-on http://localhost:5173 --timeout 180000 + + # ── Verification tests (headless, no MetaMask) ─────────────────────── + - name: Run verification E2E tests + run: npm run e2e:verify + env: + CI: 'true' + + - name: Upload Playwright report + if: always() + uses: actions/upload-artifact@v4 + with: + name: playwright-report-verify + path: playwright-report-verify/ + retention-days: 7 + + - name: Upload screenshots on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: verify-test-results + path: test-results/ + retention-days: 7 + if-no-files-found: ignore diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 0000000..a6ea1cc --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,124 @@ +name: E2E Tests + +on: + pull_request: + branches: [main, develop] + workflow_dispatch: # allow manual trigger + +jobs: + e2e: + runs-on: ubuntu-latest + timeout-minutes: 60 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Install Playwright browsers + run: npx playwright install chromium --with-deps + + # ── Hardhat node ───────────────────────────────────────────────────── + - name: Start Hardhat node + run: npx hardhat node & + env: + # Give the node a moment before we use it + NODE_OPTIONS: --max-old-space-size=4096 + + - name: Wait for Hardhat node + run: npx wait-on http://127.0.0.1:8545 --timeout 180000 + + - name: Deploy contracts and mint tokens + run: node e2e/setup-contracts.cjs + + # ── Dev server ─────────────────────────────────────────────────────── + - name: Start dev server + run: npm run dev & + env: + VITE_APP_NETWORK: local + VITE_NETWORK_TYPE: testnet + VITE_RPC_URL_1337: http://127.0.0.1:8545 + VITE_RPC_URL_80002: https://rpc-amoy.polygon.technology/ + VITE_RPC_URL_137: https://rpc.ankr.com/polygon + + - name: Wait for dev server + run: npx wait-on http://localhost:5173 --timeout 180000 + + # ── MetaMask wallet cache ──────────────────────────────────────────── + # Cache the wallet setup so it is not rebuilt on every run. + - name: Cache MetaMask wallet + id: metamask-cache + uses: actions/cache@v4 + with: + path: .cache-synpress + key: metamask-wallet-${{ hashFiles('e2e/wallet-setup/**') }} + + - name: Build MetaMask wallet cache + if: steps.metamask-cache.outputs.cache-hit != 'true' + timeout-minutes: 10 + run: npm run e2e:setup-wallet -- --headless + env: + HEADLESS: 'true' + + # ── E2E tests ──────────────────────────────────────────────────────── + - name: Start Xvfb virtual display + run: | + Xvfb :99 -screen 0 1280x720x24 >/dev/null 2>&1 & + sleep 1 + + - name: Install ffmpeg + run: sudo apt-get install -y ffmpeg + + - name: Start screen recording + run: | + ffmpeg -f x11grab -video_size 1280x720 -framerate 15 \ + -i :99 -c:v libx264 -preset ultrafast -pix_fmt yuv420p \ + /tmp/e2e-recording.mp4 & + echo $! > /tmp/ffmpeg.pid + + - name: Run E2E tests + run: npm run e2e + env: + DISPLAY: ':99' + CI: 'true' + + - name: Stop screen recording + if: always() + run: | + kill $(cat /tmp/ffmpeg.pid) 2>/dev/null || true + sleep 2 + + # ── Artifacts ──────────────────────────────────────────────────────── + - name: Upload Playwright report + if: always() + uses: actions/upload-artifact@v4 + with: + name: playwright-report + path: playwright-report/ + retention-days: 7 + + - name: Upload screen recording + if: always() + uses: actions/upload-artifact@v4 + with: + name: screen-recording + path: /tmp/e2e-recording.mp4 + retention-days: 7 + if-no-files-found: ignore + + - name: Upload screenshots on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: test-results + path: test-results/ + retention-days: 7 + if-no-files-found: ignore diff --git a/.gitignore b/.gitignore index 1ce22ee..3dd015a 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,9 @@ trustvc-cms/.sanity # Misc *.pem *.tsbuildinfo + +# Playwright / Synpress +.cache-synpress +playwright-report +test-results +cache diff --git a/e2e/fixtures.ts b/e2e/fixtures.ts new file mode 100644 index 0000000..1e7ca01 --- /dev/null +++ b/e2e/fixtures.ts @@ -0,0 +1,8 @@ +import { testWithSynpress } from '@synthetixio/synpress' +import { MetaMask, metaMaskFixtures } from '@synthetixio/synpress/playwright' +import BasicSetup from './wallet-setup/basic.setup' + +const test = testWithSynpress(metaMaskFixtures(BasicSetup)) +const { expect } = test + +export { test, expect, MetaMask, BasicSetup } diff --git a/e2e/fixtures/ERC1967Proxy.json b/e2e/fixtures/ERC1967Proxy.json new file mode 100644 index 0000000..1f1c117 --- /dev/null +++ b/e2e/fixtures/ERC1967Proxy.json @@ -0,0 +1,6237 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "functionDebugData": { + "@_49": { + "entryPoint": null, + "id": 49, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@_setImplementation_118": { + "entryPoint": 383, + "id": 118, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_upgradeToAndCall_163": { + "entryPoint": 175, + "id": 163, + "parameterSlots": 3, + "returnSlots": 0 + }, + "@_upgradeTo_133": { + "entryPoint": 242, + "id": 133, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@functionDelegateCall_670": { + "entryPoint": 329, + "id": 670, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@functionDelegateCall_705": { + "entryPoint": 597, + "id": 705, + "parameterSlots": 3, + "returnSlots": 1 + }, + "@getAddressSlot_763": { + "entryPoint": 860, + "id": 763, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@isContract_460": { + "entryPoint": 825, + "id": 460, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@verifyCallResult_736": { + "entryPoint": 870, + "id": 736, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_decode_available_length_t_bytes_memory_ptr_fromMemory": { + "entryPoint": 978, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_decode_t_address_fromMemory": { + "entryPoint": 1053, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_bytes_memory_ptr_fromMemory": { + "entryPoint": 1076, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory": { + "entryPoint": 1127, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack": { + "entryPoint": 1229, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack": { + "entryPoint": 1284, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack": { + "entryPoint": 1349, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack": { + "entryPoint": 1388, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { + "entryPoint": 1427, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 1452, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 1488, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 1522, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "allocate_memory": { + "entryPoint": 1556, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": 1587, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "array_allocation_size_t_bytes_memory_ptr": { + "entryPoint": 1597, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_length_t_bytes_memory_ptr": { + "entryPoint": 1651, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_length_t_string_memory_ptr": { + "entryPoint": 1662, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack": { + "entryPoint": 1673, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "array_storeLengthForEncoding_t_string_memory_ptr_fromStack": { + "entryPoint": 1684, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_sub_t_uint256": { + "entryPoint": 1701, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_address": { + "entryPoint": 1760, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint160": { + "entryPoint": 1780, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 1812, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "copy_memory_to_memory": { + "entryPoint": 1822, + "id": null, + "parameterSlots": 3, + "returnSlots": 0 + }, + "finalize_allocation": { + "entryPoint": 1876, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "panic_error_0x01": { + "entryPoint": 1930, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x11": { + "entryPoint": 1977, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x41": { + "entryPoint": 2024, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": { + "entryPoint": 2071, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae": { + "entryPoint": 2076, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": 2081, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 2086, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "round_up_to_mul_of_32": { + "entryPoint": 2091, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65": { + "entryPoint": 2108, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520": { + "entryPoint": 2187, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_address": { + "entryPoint": 2266, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:8508:7", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "101:325:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "111:74:7", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "177:6:7" + } + ], + "functionName": { + "name": "array_allocation_size_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "136:40:7" + }, + "nodeType": "YulFunctionCall", + "src": "136:48:7" + } + ], + "functionName": { + "name": "allocate_memory", + "nodeType": "YulIdentifier", + "src": "120:15:7" + }, + "nodeType": "YulFunctionCall", + "src": "120:65:7" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "111:5:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "201:5:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "208:6:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "194:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "194:21:7" + }, + "nodeType": "YulExpressionStatement", + "src": "194:21:7" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "224:27:7", + "value": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "239:5:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "246:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "235:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "235:16:7" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "228:3:7", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "289:83:7", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", + "nodeType": "YulIdentifier", + "src": "291:77:7" + }, + "nodeType": "YulFunctionCall", + "src": "291:79:7" + }, + "nodeType": "YulExpressionStatement", + "src": "291:79:7" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "270:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "275:6:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "266:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "266:16:7" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "284:3:7" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "263:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "263:25:7" + }, + "nodeType": "YulIf", + "src": "260:112:7" + }, + { + "expression": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "403:3:7" + }, + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "408:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "413:6:7" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "381:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "381:39:7" + }, + "nodeType": "YulExpressionStatement", + "src": "381:39:7" + } + ] + }, + "name": "abi_decode_available_length_t_bytes_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "74:3:7", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "79:6:7", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "87:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "95:5:7", + "type": "" + } + ], + "src": "7:419:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "495:80:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "505:22:7", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "520:6:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "514:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "514:13:7" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "505:5:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "563:5:7" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "536:26:7" + }, + "nodeType": "YulFunctionCall", + "src": "536:33:7" + }, + "nodeType": "YulExpressionStatement", + "src": "536:33:7" + } + ] + }, + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "473:6:7", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "481:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "489:5:7", + "type": "" + } + ], + "src": "432:143:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "666:281:7", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "715:83:7", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulIdentifier", + "src": "717:77:7" + }, + "nodeType": "YulFunctionCall", + "src": "717:79:7" + }, + "nodeType": "YulExpressionStatement", + "src": "717:79:7" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "694:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "702:4:7", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "690:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "690:17:7" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "709:3:7" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "686:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "686:27:7" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "679:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "679:35:7" + }, + "nodeType": "YulIf", + "src": "676:122:7" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "807:27:7", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "827:6:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "821:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "821:13:7" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "811:6:7", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "843:98:7", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "914:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "922:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "910:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "910:17:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "929:6:7" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "937:3:7" + } + ], + "functionName": { + "name": "abi_decode_available_length_t_bytes_memory_ptr_fromMemory", + "nodeType": "YulIdentifier", + "src": "852:57:7" + }, + "nodeType": "YulFunctionCall", + "src": "852:89:7" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "843:5:7" + } + ] + } + ] + }, + "name": "abi_decode_t_bytes_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "644:6:7", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "652:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "660:5:7", + "type": "" + } + ], + "src": "594:353:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1056:575:7", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1102:83:7", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1104:77:7" + }, + "nodeType": "YulFunctionCall", + "src": "1104:79:7" + }, + "nodeType": "YulExpressionStatement", + "src": "1104:79:7" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1077:7:7" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1086:9:7" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1073:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1073:23:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1098:2:7", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1069:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1069:32:7" + }, + "nodeType": "YulIf", + "src": "1066:119:7" + }, + { + "nodeType": "YulBlock", + "src": "1195:128:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1210:15:7", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1224:1:7", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1214:6:7", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1239:74:7", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1285:9:7" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1296:6:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1281:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1281:22:7" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1305:7:7" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "1249:31:7" + }, + "nodeType": "YulFunctionCall", + "src": "1249:64:7" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1239:6:7" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1333:291:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1348:39:7", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1372:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1383:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1368:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1368:18:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1362:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "1362:25:7" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1352:6:7", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1434:83:7", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulIdentifier", + "src": "1436:77:7" + }, + "nodeType": "YulFunctionCall", + "src": "1436:79:7" + }, + "nodeType": "YulExpressionStatement", + "src": "1436:79:7" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1406:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1414:18:7", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1403:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "1403:30:7" + }, + "nodeType": "YulIf", + "src": "1400:117:7" + }, + { + "nodeType": "YulAssignment", + "src": "1531:83:7", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1586:9:7" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1597:6:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1582:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1582:22:7" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1606:7:7" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_memory_ptr_fromMemory", + "nodeType": "YulIdentifier", + "src": "1541:40:7" + }, + "nodeType": "YulFunctionCall", + "src": "1541:73:7" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1531:6:7" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1018:9:7", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1029:7:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1041:6:7", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "1049:6:7", + "type": "" + } + ], + "src": "953:678:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1745:265:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1755:52:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1801:5:7" + } + ], + "functionName": { + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "1769:31:7" + }, + "nodeType": "YulFunctionCall", + "src": "1769:38:7" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "1759:6:7", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1816:95:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1899:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1904:6:7" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "1823:75:7" + }, + "nodeType": "YulFunctionCall", + "src": "1823:88:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1816:3:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1946:5:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1953:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1942:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1942:16:7" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1960:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1965:6:7" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "1920:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "1920:52:7" + }, + "nodeType": "YulExpressionStatement", + "src": "1920:52:7" + }, + { + "nodeType": "YulAssignment", + "src": "1981:23:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1992:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "1997:6:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1988:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1988:16:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1981:3:7" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1726:5:7", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1733:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1741:3:7", + "type": "" + } + ], + "src": "1637:373:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2108:272:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2118:53:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2165:5:7" + } + ], + "functionName": { + "name": "array_length_t_string_memory_ptr", + "nodeType": "YulIdentifier", + "src": "2132:32:7" + }, + "nodeType": "YulFunctionCall", + "src": "2132:39:7" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2122:6:7", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2180:78:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2246:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2251:6:7" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "2187:58:7" + }, + "nodeType": "YulFunctionCall", + "src": "2187:71:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2180:3:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2293:5:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2300:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2289:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "2289:16:7" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2307:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2312:6:7" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "2267:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "2267:52:7" + }, + "nodeType": "YulExpressionStatement", + "src": "2267:52:7" + }, + { + "nodeType": "YulAssignment", + "src": "2328:46:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2339:3:7" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2366:6:7" + } + ], + "functionName": { + "name": "round_up_to_mul_of_32", + "nodeType": "YulIdentifier", + "src": "2344:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "2344:29:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2335:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "2335:39:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2328:3:7" + } + ] + } + ] + }, + "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2089:5:7", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2096:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2104:3:7", + "type": "" + } + ], + "src": "2016:364:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2532:220:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2542:74:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2608:3:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2613:2:7", + "type": "", + "value": "45" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "2549:58:7" + }, + "nodeType": "YulFunctionCall", + "src": "2549:67:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2542:3:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2714:3:7" + } + ], + "functionName": { + "name": "store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65", + "nodeType": "YulIdentifier", + "src": "2625:88:7" + }, + "nodeType": "YulFunctionCall", + "src": "2625:93:7" + }, + "nodeType": "YulExpressionStatement", + "src": "2625:93:7" + }, + { + "nodeType": "YulAssignment", + "src": "2727:19:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2738:3:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2743:2:7", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2734:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "2734:12:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2727:3:7" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2520:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2528:3:7", + "type": "" + } + ], + "src": "2386:366:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2904:220:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2914:74:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2980:3:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2985:2:7", + "type": "", + "value": "38" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "2921:58:7" + }, + "nodeType": "YulFunctionCall", + "src": "2921:67:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2914:3:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3086:3:7" + } + ], + "functionName": { + "name": "store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520", + "nodeType": "YulIdentifier", + "src": "2997:88:7" + }, + "nodeType": "YulFunctionCall", + "src": "2997:93:7" + }, + "nodeType": "YulExpressionStatement", + "src": "2997:93:7" + }, + { + "nodeType": "YulAssignment", + "src": "3099:19:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3110:3:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3115:2:7", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3106:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3106:12:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3099:3:7" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2892:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2900:3:7", + "type": "" + } + ], + "src": "2758:366:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3264:137:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3275:100:7", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3362:6:7" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3371:3:7" + } + ], + "functionName": { + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "3282:79:7" + }, + "nodeType": "YulFunctionCall", + "src": "3282:93:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3275:3:7" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3385:10:7", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3392:3:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3385:3:7" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "3243:3:7", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "3249:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "3260:3:7", + "type": "" + } + ], + "src": "3130:271:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3525:195:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3535:26:7", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3547:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3558:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3543:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3543:18:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3535:4:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3582:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3593:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3578:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3578:17:7" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3601:4:7" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3607:9:7" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3597:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3597:20:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3571:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "3571:47:7" + }, + "nodeType": "YulExpressionStatement", + "src": "3571:47:7" + }, + { + "nodeType": "YulAssignment", + "src": "3627:86:7", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3699:6:7" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3708:4:7" + } + ], + "functionName": { + "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "3635:63:7" + }, + "nodeType": "YulFunctionCall", + "src": "3635:78:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3627:4:7" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "3497:9:7", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "3509:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "3520:4:7", + "type": "" + } + ], + "src": "3407:313:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3897:248:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3907:26:7", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3919:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3930:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3915:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3915:18:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3907:4:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3954:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3965:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3950:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3950:17:7" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3973:4:7" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3979:9:7" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3969:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3969:20:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3943:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "3943:47:7" + }, + "nodeType": "YulExpressionStatement", + "src": "3943:47:7" + }, + { + "nodeType": "YulAssignment", + "src": "3999:139:7", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "4133:4:7" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "4007:124:7" + }, + "nodeType": "YulFunctionCall", + "src": "4007:131:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3999:4:7" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "3877:9:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "3892:4:7", + "type": "" + } + ], + "src": "3726:419:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4322:248:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4332:26:7", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4344:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4355:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4340:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "4340:18:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "4332:4:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4379:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4390:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4375:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "4375:17:7" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "4398:4:7" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4404:9:7" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "4394:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "4394:20:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4368:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "4368:47:7" + }, + "nodeType": "YulExpressionStatement", + "src": "4368:47:7" + }, + { + "nodeType": "YulAssignment", + "src": "4424:139:7", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "4558:4:7" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "4432:124:7" + }, + "nodeType": "YulFunctionCall", + "src": "4432:131:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "4424:4:7" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "4302:9:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "4317:4:7", + "type": "" + } + ], + "src": "4151:419:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4617:88:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4627:30:7", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_unbounded", + "nodeType": "YulIdentifier", + "src": "4637:18:7" + }, + "nodeType": "YulFunctionCall", + "src": "4637:20:7" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4627:6:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4686:6:7" + }, + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "4694:4:7" + } + ], + "functionName": { + "name": "finalize_allocation", + "nodeType": "YulIdentifier", + "src": "4666:19:7" + }, + "nodeType": "YulFunctionCall", + "src": "4666:33:7" + }, + "nodeType": "YulExpressionStatement", + "src": "4666:33:7" + } + ] + }, + "name": "allocate_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "4601:4:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "4610:6:7", + "type": "" + } + ], + "src": "4576:129:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4751:35:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4761:19:7", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4777:2:7", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4771:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "4771:9:7" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4761:6:7" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "4744:6:7", + "type": "" + } + ], + "src": "4711:75:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4858:241:7", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "4963:22:7", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nodeType": "YulIdentifier", + "src": "4965:16:7" + }, + "nodeType": "YulFunctionCall", + "src": "4965:18:7" + }, + "nodeType": "YulExpressionStatement", + "src": "4965:18:7" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "4935:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4943:18:7", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4932:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "4932:30:7" + }, + "nodeType": "YulIf", + "src": "4929:56:7" + }, + { + "nodeType": "YulAssignment", + "src": "4995:37:7", + "value": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5025:6:7" + } + ], + "functionName": { + "name": "round_up_to_mul_of_32", + "nodeType": "YulIdentifier", + "src": "5003:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "5003:29:7" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "4995:4:7" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "5069:23:7", + "value": { + "arguments": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "5081:4:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5087:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5077:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "5077:15:7" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "5069:4:7" + } + ] + } + ] + }, + "name": "array_allocation_size_t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "4842:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "4853:4:7", + "type": "" + } + ], + "src": "4792:307:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5163:40:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5174:22:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5190:5:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5184:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "5184:12:7" + }, + "variableNames": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5174:6:7" + } + ] + } + ] + }, + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5146:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "5156:6:7", + "type": "" + } + ], + "src": "5105:98:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5268:40:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5279:22:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5295:5:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5289:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "5289:12:7" + }, + "variableNames": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5279:6:7" + } + ] + } + ] + }, + "name": "array_length_t_string_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5251:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "5261:6:7", + "type": "" + } + ], + "src": "5209:99:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5427:34:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5437:18:7", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5452:3:7" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "5437:11:7" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "5399:3:7", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "5404:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "5415:11:7", + "type": "" + } + ], + "src": "5314:147:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5563:73:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5580:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5585:6:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5573:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "5573:19:7" + }, + "nodeType": "YulExpressionStatement", + "src": "5573:19:7" + }, + { + "nodeType": "YulAssignment", + "src": "5601:29:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5620:3:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5625:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5616:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "5616:14:7" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "5601:11:7" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "5535:3:7", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "5540:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "5551:11:7", + "type": "" + } + ], + "src": "5467:169:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5687:146:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5697:25:7", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "5720:1:7" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "5702:17:7" + }, + "nodeType": "YulFunctionCall", + "src": "5702:20:7" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "5697:1:7" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "5731:25:7", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "5754:1:7" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "5736:17:7" + }, + "nodeType": "YulFunctionCall", + "src": "5736:20:7" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "5731:1:7" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5778:22:7", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "5780:16:7" + }, + "nodeType": "YulFunctionCall", + "src": "5780:18:7" + }, + "nodeType": "YulExpressionStatement", + "src": "5780:18:7" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "5772:1:7" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "5775:1:7" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "5769:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "5769:8:7" + }, + "nodeType": "YulIf", + "src": "5766:34:7" + }, + { + "nodeType": "YulAssignment", + "src": "5810:17:7", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "5822:1:7" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "5825:1:7" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "5818:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "5818:9:7" + }, + "variableNames": [ + { + "name": "diff", + "nodeType": "YulIdentifier", + "src": "5810:4:7" + } + ] + } + ] + }, + "name": "checked_sub_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "5673:1:7", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "5676:1:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "diff", + "nodeType": "YulTypedName", + "src": "5682:4:7", + "type": "" + } + ], + "src": "5642:191:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5884:51:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5894:35:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5923:5:7" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "5905:17:7" + }, + "nodeType": "YulFunctionCall", + "src": "5905:24:7" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "5894:7:7" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5866:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "5876:7:7", + "type": "" + } + ], + "src": "5839:96:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5986:81:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5996:65:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6011:5:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6018:42:7", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "6007:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "6007:54:7" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "5996:7:7" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5968:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "5978:7:7", + "type": "" + } + ], + "src": "5941:126:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6118:32:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6128:16:7", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6139:5:7" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "6128:7:7" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6100:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "6110:7:7", + "type": "" + } + ], + "src": "6073:77:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6205:258:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "6215:10:7", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6224:1:7", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "6219:1:7", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6284:63:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "6309:3:7" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6314:1:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6305:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "6305:11:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "6328:3:7" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6333:1:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6324:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "6324:11:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6318:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "6318:18:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6298:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "6298:39:7" + }, + "nodeType": "YulExpressionStatement", + "src": "6298:39:7" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6245:1:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "6248:6:7" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "6242:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "6242:13:7" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "6256:19:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6258:15:7", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6267:1:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6270:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6263:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "6263:10:7" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6258:1:7" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "6238:3:7", + "statements": [] + }, + "src": "6234:113:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6381:76:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "6431:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "6436:6:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6427:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "6427:16:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6445:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6420:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "6420:27:7" + }, + "nodeType": "YulExpressionStatement", + "src": "6420:27:7" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6362:1:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "6365:6:7" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6359:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "6359:13:7" + }, + "nodeType": "YulIf", + "src": "6356:101:7" + } + ] + }, + "name": "copy_memory_to_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "6187:3:7", + "type": "" + }, + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "6192:3:7", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "6197:6:7", + "type": "" + } + ], + "src": "6156:307:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6512:238:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "6522:58:7", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "6544:6:7" + }, + { + "arguments": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "6574:4:7" + } + ], + "functionName": { + "name": "round_up_to_mul_of_32", + "nodeType": "YulIdentifier", + "src": "6552:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "6552:27:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6540:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "6540:40:7" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "6526:10:7", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6691:22:7", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nodeType": "YulIdentifier", + "src": "6693:16:7" + }, + "nodeType": "YulFunctionCall", + "src": "6693:18:7" + }, + "nodeType": "YulExpressionStatement", + "src": "6693:18:7" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "6634:10:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6646:18:7", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6631:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "6631:34:7" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "6670:10:7" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "6682:6:7" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "6667:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "6667:22:7" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "6628:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "6628:62:7" + }, + "nodeType": "YulIf", + "src": "6625:88:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6729:2:7", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "6733:10:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6722:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "6722:22:7" + }, + "nodeType": "YulExpressionStatement", + "src": "6722:22:7" + } + ] + }, + "name": "finalize_allocation", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "6498:6:7", + "type": "" + }, + { + "name": "size", + "nodeType": "YulTypedName", + "src": "6506:4:7", + "type": "" + } + ], + "src": "6469:281:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6784:152:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6801:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6804:77:7", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6794:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "6794:88:7" + }, + "nodeType": "YulExpressionStatement", + "src": "6794:88:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6898:1:7", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6901:4:7", + "type": "", + "value": "0x01" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6891:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "6891:15:7" + }, + "nodeType": "YulExpressionStatement", + "src": "6891:15:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6922:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6925:4:7", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6915:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "6915:15:7" + }, + "nodeType": "YulExpressionStatement", + "src": "6915:15:7" + } + ] + }, + "name": "panic_error_0x01", + "nodeType": "YulFunctionDefinition", + "src": "6756:180:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6970:152:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6987:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6990:77:7", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6980:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "6980:88:7" + }, + "nodeType": "YulExpressionStatement", + "src": "6980:88:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7084:1:7", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7087:4:7", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7077:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7077:15:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7077:15:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7108:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7111:4:7", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7101:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7101:15:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7101:15:7" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "6942:180:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7156:152:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7173:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7176:77:7", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7166:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7166:88:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7166:88:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7270:1:7", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7273:4:7", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7263:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7263:15:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7263:15:7" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7294:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7297:4:7", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7287:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7287:15:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7287:15:7" + } + ] + }, + "name": "panic_error_0x41", + "nodeType": "YulFunctionDefinition", + "src": "7128:180:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7403:28:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7420:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7423:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7413:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7413:12:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7413:12:7" + } + ] + }, + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulFunctionDefinition", + "src": "7314:117:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7526:28:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7543:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7546:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7536:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7536:12:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7536:12:7" + } + ] + }, + "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", + "nodeType": "YulFunctionDefinition", + "src": "7437:117:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7649:28:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7666:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7669:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7659:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7659:12:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7659:12:7" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "7560:117:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7772:28:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7789:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7792:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7782:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "7782:12:7" + }, + "nodeType": "YulExpressionStatement", + "src": "7782:12:7" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "7683:117:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7854:54:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7864:38:7", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7882:5:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7889:2:7", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7878:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "7878:14:7" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7898:2:7", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "7894:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "7894:7:7" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "7874:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "7874:28:7" + }, + "variableNames": [ + { + "name": "result", + "nodeType": "YulIdentifier", + "src": "7864:6:7" + } + ] + } + ] + }, + "name": "round_up_to_mul_of_32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7837:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "result", + "nodeType": "YulTypedName", + "src": "7847:6:7", + "type": "" + } + ], + "src": "7806:102:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8020:126:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "8042:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8050:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8038:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "8038:14:7" + }, + { + "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", + "kind": "string", + "nodeType": "YulLiteral", + "src": "8054:34:7", + "type": "", + "value": "ERC1967: new implementation is n" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8031:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "8031:58:7" + }, + "nodeType": "YulExpressionStatement", + "src": "8031:58:7" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "8110:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8118:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8106:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "8106:15:7" + }, + { + "hexValue": "6f74206120636f6e7472616374", + "kind": "string", + "nodeType": "YulLiteral", + "src": "8123:15:7", + "type": "", + "value": "ot a contract" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8099:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "8099:40:7" + }, + "nodeType": "YulExpressionStatement", + "src": "8099:40:7" + } + ] + }, + "name": "store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "8012:6:7", + "type": "" + } + ], + "src": "7914:232:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8258:119:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "8280:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8288:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8276:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "8276:14:7" + }, + { + "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", + "kind": "string", + "nodeType": "YulLiteral", + "src": "8292:34:7", + "type": "", + "value": "Address: delegate call to non-co" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8269:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "8269:58:7" + }, + "nodeType": "YulExpressionStatement", + "src": "8269:58:7" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "8348:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8356:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8344:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "8344:15:7" + }, + { + "hexValue": "6e7472616374", + "kind": "string", + "nodeType": "YulLiteral", + "src": "8361:8:7", + "type": "", + "value": "ntract" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8337:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "8337:33:7" + }, + "nodeType": "YulExpressionStatement", + "src": "8337:33:7" + } + ] + }, + "name": "store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "8250:6:7", + "type": "" + } + ], + "src": "8152:225:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8426:79:7", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "8483:16:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8492:1:7", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8495:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8485:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "8485:12:7" + }, + "nodeType": "YulExpressionStatement", + "src": "8485:12:7" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8449:5:7" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8474:5:7" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "8456:17:7" + }, + "nodeType": "YulFunctionCall", + "src": "8456:24:7" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "8446:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "8446:35:7" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "8439:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "8439:43:7" + }, + "nodeType": "YulIf", + "src": "8436:63:7" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "8419:5:7", + "type": "" + } + ], + "src": "8383:122:7" + } + ] + }, + "contents": "{\n\n function abi_decode_available_length_t_bytes_memory_ptr_fromMemory(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_memory_to_memory(src, dst, length)\n }\n\n function abi_decode_t_address_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr_fromMemory(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := mload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := mload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value1 := abi_decode_t_bytes_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 45)\n store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n if lt(x, y) { panic_error_0x11() }\n\n diff := sub(x, y)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function panic_error_0x01() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function store_literal_in_memory_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC1967: new implementation is n\")\n\n mstore(add(memPtr, 32), \"ot a contract\")\n\n }\n\n function store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(memPtr) {\n\n mstore(add(memPtr, 0), \"Address: delegate call to non-co\")\n\n mstore(add(memPtr, 32), \"ntract\")\n\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n}\n", + "id": 7, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405260405162000d8638038062000d86833981810160405281019062000029919062000467565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6200005b9190620006a5565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b146200009357620000926200078a565b5b620000a782826000620000af60201b60201c565b5050620008f4565b620000c083620000f260201b60201c565b600082511180620000ce5750805b15620000ed57620000eb83836200014960201b620000371760201c565b505b505050565b62000103816200017f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b606062000177838360405180606001604052806027815260200162000d5f602791396200025560201b60201c565b905092915050565b62000195816200033960201b620000641760201c565b620001d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ce90620005d0565b60405180910390fd5b80620002117f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200035c60201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606062000268846200033960201b60201c565b620002aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a190620005f2565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002d4919062000593565b600060405180830381855af49150503d806000811462000311576040519150601f19603f3d011682016040523d82523d6000602084013e62000316565b606091505b50915091506200032e8282866200036660201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200037857829050620003cb565b6000835111156200038c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c29190620005ac565b60405180910390fd5b9392505050565b6000620003e9620003e3846200063d565b62000614565b9050828152602081018484840111156200040857620004076200081c565b5b620004158482856200071e565b509392505050565b6000815190506200042e81620008da565b92915050565b600082601f8301126200044c576200044b62000817565b5b81516200045e848260208601620003d2565b91505092915050565b6000806040838503121562000481576200048062000826565b5b600062000491858286016200041d565b925050602083015167ffffffffffffffff811115620004b557620004b462000821565b5b620004c38582860162000434565b9150509250929050565b6000620004da8262000673565b620004e6818562000689565b9350620004f88185602086016200071e565b80840191505092915050565b600062000511826200067e565b6200051d818562000694565b93506200052f8185602086016200071e565b6200053a816200082b565b840191505092915050565b600062000554602d8362000694565b915062000561826200083c565b604082019050919050565b60006200057b60268362000694565b915062000588826200088b565b604082019050919050565b6000620005a18284620004cd565b915081905092915050565b60006020820190508181036000830152620005c8818462000504565b905092915050565b60006020820190508181036000830152620005eb8162000545565b9050919050565b600060208201905081810360008301526200060d816200056c565b9050919050565b60006200062062000633565b90506200062e828262000754565b919050565b6000604051905090565b600067ffffffffffffffff8211156200065b576200065a620007e8565b5b62000666826200082b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000620006b28262000714565b9150620006bf8362000714565b925082821015620006d557620006d4620007b9565b5b828203905092915050565b6000620006ed82620006f4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200073e57808201518184015260208101905062000721565b838111156200074e576000848401525b50505050565b6200075f826200082b565b810181811067ffffffffffffffff82111715620007815762000780620007e8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b620008e581620006e0565b8114620008f157600080fd5b50565b61045b80620009046000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103ff602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d610195565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606100d384610064565b610112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010990610319565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161013a91906102e0565b600060405180830381855af49150503d8060008114610175576040519150601f19603f3d011682016040523d82523d6000602084013e61017a565b606091505b509150915061018a8282866101ec565b925050509392505050565b60006101c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156101fc5782905061024c565b60008351111561020f5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024391906102f7565b60405180910390fd5b9392505050565b600061025e82610339565b610268818561034f565b935061027881856020860161036b565b80840191505092915050565b600061028f82610344565b610299818561035a565b93506102a981856020860161036b565b6102b28161039e565b840191505092915050565b60006102ca60268361035a565b91506102d5826103af565b604082019050919050565b60006102ec8284610253565b915081905092915050565b600060208201905081810360008301526103118184610284565b905092915050565b60006020820190508181036000830152610332816102bd565b9050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60005b8381101561038957808201518184015260208101905061036e565b83811115610398576000848401525b50505050565b6000601f19601f8301169050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e7472616374000000000000000000000000000000000000000000000000000060208201525056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ee71d3e64d2bf477a4558de3b7a5544a8eae3b46719e174bafaba2b7f0d132bb64736f6c63430008070033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xD86 CODESIZE SUB DUP1 PUSH3 0xD86 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH3 0x29 SWAP2 SWAP1 PUSH3 0x467 JUMP JUMPDEST PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH1 0x0 SHR PUSH3 0x5B SWAP2 SWAP1 PUSH3 0x6A5 JUMP JUMPDEST PUSH1 0x0 SHL PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL EQ PUSH3 0x93 JUMPI PUSH3 0x92 PUSH3 0x78A JUMP JUMPDEST JUMPDEST PUSH3 0xA7 DUP3 DUP3 PUSH1 0x0 PUSH3 0xAF PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP PUSH3 0x8F4 JUMP JUMPDEST PUSH3 0xC0 DUP4 PUSH3 0xF2 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH3 0xCE JUMPI POP DUP1 JUMPDEST ISZERO PUSH3 0xED JUMPI PUSH3 0xEB DUP4 DUP4 PUSH3 0x149 PUSH1 0x20 SHL PUSH3 0x37 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH3 0x103 DUP2 PUSH3 0x17F PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x177 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0xD5F PUSH1 0x27 SWAP2 CODECOPY PUSH3 0x255 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH3 0x195 DUP2 PUSH3 0x339 PUSH1 0x20 SHL PUSH3 0x64 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x1CE SWAP1 PUSH3 0x5D0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH3 0x211 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL PUSH3 0x35C PUSH1 0x20 SHL PUSH3 0x87 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x268 DUP5 PUSH3 0x339 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x2AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x2A1 SWAP1 PUSH3 0x5F2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH3 0x2D4 SWAP2 SWAP1 PUSH3 0x593 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x311 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x316 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH3 0x32E DUP3 DUP3 DUP7 PUSH3 0x366 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE GT SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH3 0x378 JUMPI DUP3 SWAP1 POP PUSH3 0x3CB JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD GT ISZERO PUSH3 0x38C JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x3C2 SWAP2 SWAP1 PUSH3 0x5AC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x3E9 PUSH3 0x3E3 DUP5 PUSH3 0x63D JUMP JUMPDEST PUSH3 0x614 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH3 0x408 JUMPI PUSH3 0x407 PUSH3 0x81C JUMP JUMPDEST JUMPDEST PUSH3 0x415 DUP5 DUP3 DUP6 PUSH3 0x71E JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH3 0x42E DUP2 PUSH3 0x8DA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x44C JUMPI PUSH3 0x44B PUSH3 0x817 JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH3 0x45E DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH3 0x3D2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x481 JUMPI PUSH3 0x480 PUSH3 0x826 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH3 0x491 DUP6 DUP3 DUP7 ADD PUSH3 0x41D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH3 0x4B5 JUMPI PUSH3 0x4B4 PUSH3 0x821 JUMP JUMPDEST JUMPDEST PUSH3 0x4C3 DUP6 DUP3 DUP7 ADD PUSH3 0x434 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x4DA DUP3 PUSH3 0x673 JUMP JUMPDEST PUSH3 0x4E6 DUP2 DUP6 PUSH3 0x689 JUMP JUMPDEST SWAP4 POP PUSH3 0x4F8 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH3 0x71E JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x511 DUP3 PUSH3 0x67E JUMP JUMPDEST PUSH3 0x51D DUP2 DUP6 PUSH3 0x694 JUMP JUMPDEST SWAP4 POP PUSH3 0x52F DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH3 0x71E JUMP JUMPDEST PUSH3 0x53A DUP2 PUSH3 0x82B JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x554 PUSH1 0x2D DUP4 PUSH3 0x694 JUMP JUMPDEST SWAP2 POP PUSH3 0x561 DUP3 PUSH3 0x83C JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x57B PUSH1 0x26 DUP4 PUSH3 0x694 JUMP JUMPDEST SWAP2 POP PUSH3 0x588 DUP3 PUSH3 0x88B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x5A1 DUP3 DUP5 PUSH3 0x4CD JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH3 0x5C8 DUP2 DUP5 PUSH3 0x504 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH3 0x5EB DUP2 PUSH3 0x545 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH3 0x60D DUP2 PUSH3 0x56C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x620 PUSH3 0x633 JUMP JUMPDEST SWAP1 POP PUSH3 0x62E DUP3 DUP3 PUSH3 0x754 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH3 0x65B JUMPI PUSH3 0x65A PUSH3 0x7E8 JUMP JUMPDEST JUMPDEST PUSH3 0x666 DUP3 PUSH3 0x82B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x6B2 DUP3 PUSH3 0x714 JUMP JUMPDEST SWAP2 POP PUSH3 0x6BF DUP4 PUSH3 0x714 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 LT ISZERO PUSH3 0x6D5 JUMPI PUSH3 0x6D4 PUSH3 0x7B9 JUMP JUMPDEST JUMPDEST DUP3 DUP3 SUB SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x6ED DUP3 PUSH3 0x6F4 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x73E JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH3 0x721 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x74E JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH3 0x75F DUP3 PUSH3 0x82B JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH3 0x781 JUMPI PUSH3 0x780 PUSH3 0x7E8 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH3 0x8E5 DUP2 PUSH3 0x6E0 JUMP JUMPDEST DUP2 EQ PUSH3 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x45B DUP1 PUSH3 0x904 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x1D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B PUSH2 0x1D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x25 PUSH2 0x91 JUMP JUMPDEST PUSH2 0x35 PUSH2 0x30 PUSH2 0x93 JUMP JUMPDEST PUSH2 0xA2 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3FF PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xC8 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE GT SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9D PUSH2 0x195 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC3 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH2 0xD3 DUP5 PUSH2 0x64 JUMP JUMPDEST PUSH2 0x112 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x109 SWAP1 PUSH2 0x319 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x13A SWAP2 SWAP1 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x175 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x17A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x18A DUP3 DUP3 DUP7 PUSH2 0x1EC JUMP JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C3 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL PUSH2 0x87 JUMP JUMPDEST PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1FC JUMPI DUP3 SWAP1 POP PUSH2 0x24C JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD GT ISZERO PUSH2 0x20F JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x243 SWAP2 SWAP1 PUSH2 0x2F7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25E DUP3 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x268 DUP2 DUP6 PUSH2 0x34F JUMP JUMPDEST SWAP4 POP PUSH2 0x278 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x36B JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28F DUP3 PUSH2 0x344 JUMP JUMPDEST PUSH2 0x299 DUP2 DUP6 PUSH2 0x35A JUMP JUMPDEST SWAP4 POP PUSH2 0x2A9 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x36B JUMP JUMPDEST PUSH2 0x2B2 DUP2 PUSH2 0x39E JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CA PUSH1 0x26 DUP4 PUSH2 0x35A JUMP JUMPDEST SWAP2 POP PUSH2 0x2D5 DUP3 PUSH2 0x3AF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EC DUP3 DUP5 PUSH2 0x253 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x311 DUP2 DUP5 PUSH2 0x284 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x332 DUP2 PUSH2 0x2BD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x389 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x36E JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x398 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x70667358221220EE71D3 0xE6 0x4D 0x2B DELEGATECALL PUSH24 0xA4558DE3B7A5544A8EAE3B46719E174BAFABA2B7F0D132BB PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C65640000 ", + "sourceMap": "552:830:1:-:0;;;945:217;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1103:1;1058:41;1050:50;;:54;;;;:::i;:::-;1042:63;;1030:66:2;1018:20:1;;:87;1011:95;;;;:::i;:::-;;1116:39;1134:6;1142:5;1149;1116:17;;;:39;;:::i;:::-;945:217;;552:830;;2183:295:2;2321:29;2332:17;2321:10;;;:29;;:::i;:::-;2378:1;2364:4;:11;:15;:28;;;;2383:9;2364:28;2360:112;;;2408:53;2437:17;2456:4;2408:28;;;;;:53;;:::i;:::-;;2360:112;2183:295;;;:::o;1897:152::-;1963:37;1982:17;1963:18;;;:37;;:::i;:::-;2024:17;2015:27;;;;;;;;;;;;1897:152;:::o;6570:198:5:-;6653:12;6684:77;6705:6;6713:4;6684:77;;;;;;;;;;;;;;;;;:20;;;:77;;:::i;:::-;6677:84;;6570:198;;;;:::o;1532:259:2:-;1613:37;1632:17;1613:18;;;;;:37;;:::i;:::-;1605:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1767:17;1710:48;1030:66;1737:20;;1710:26;;;;;:48;;:::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;1532:259;:::o;6954:387:5:-;7095:12;7127:18;7138:6;7127:10;;;:18;;:::i;:::-;7119:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7200:12;7214:23;7241:6;:19;;7261:4;7241:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7199:67;;;;7283:51;7300:7;7309:10;7321:12;7283:16;;;:51;;:::i;:::-;7276:58;;;;6954:387;;;;;:::o;1175:320::-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;1599:147:6:-;1660:21;1726:4;1716:14;;1599:147;;;:::o;7561:692:5:-;7707:12;7735:7;7731:516;;;7765:10;7758:17;;;;7731:516;7896:1;7876:10;:17;:21;7872:365;;;8070:10;8064:17;8130:15;8117:10;8113:2;8109:19;8102:44;7872:365;8209:12;8202:20;;;;;;;;;;;:::i;:::-;;;;;;;;7561:692;;;;;;:::o;7:419:7:-;95:5;120:65;136:48;177:6;136:48;:::i;:::-;120:65;:::i;:::-;111:74;;208:6;201:5;194:21;246:4;239:5;235:16;284:3;275:6;270:3;266:16;263:25;260:112;;;291:79;;:::i;:::-;260:112;381:39;413:6;408:3;403;381:39;:::i;:::-;101:325;7:419;;;;;:::o;432:143::-;489:5;520:6;514:13;505:22;;536:33;563:5;536:33;:::i;:::-;432:143;;;;:::o;594:353::-;660:5;709:3;702:4;694:6;690:17;686:27;676:122;;717:79;;:::i;:::-;676:122;827:6;821:13;852:89;937:3;929:6;922:4;914:6;910:17;852:89;:::i;:::-;843:98;;666:281;594:353;;;;:::o;953:678::-;1041:6;1049;1098:2;1086:9;1077:7;1073:23;1069:32;1066:119;;;1104:79;;:::i;:::-;1066:119;1224:1;1249:64;1305:7;1296:6;1285:9;1281:22;1249:64;:::i;:::-;1239:74;;1195:128;1383:2;1372:9;1368:18;1362:25;1414:18;1406:6;1403:30;1400:117;;;1436:79;;:::i;:::-;1400:117;1541:73;1606:7;1597:6;1586:9;1582:22;1541:73;:::i;:::-;1531:83;;1333:291;953:678;;;;;:::o;1637:373::-;1741:3;1769:38;1801:5;1769:38;:::i;:::-;1823:88;1904:6;1899:3;1823:88;:::i;:::-;1816:95;;1920:52;1965:6;1960:3;1953:4;1946:5;1942:16;1920:52;:::i;:::-;1997:6;1992:3;1988:16;1981:23;;1745:265;1637:373;;;;:::o;2016:364::-;2104:3;2132:39;2165:5;2132:39;:::i;:::-;2187:71;2251:6;2246:3;2187:71;:::i;:::-;2180:78;;2267:52;2312:6;2307:3;2300:4;2293:5;2289:16;2267:52;:::i;:::-;2344:29;2366:6;2344:29;:::i;:::-;2339:3;2335:39;2328:46;;2108:272;2016:364;;;;:::o;2386:366::-;2528:3;2549:67;2613:2;2608:3;2549:67;:::i;:::-;2542:74;;2625:93;2714:3;2625:93;:::i;:::-;2743:2;2738:3;2734:12;2727:19;;2386:366;;;:::o;2758:::-;2900:3;2921:67;2985:2;2980:3;2921:67;:::i;:::-;2914:74;;2997:93;3086:3;2997:93;:::i;:::-;3115:2;3110:3;3106:12;3099:19;;2758:366;;;:::o;3130:271::-;3260:3;3282:93;3371:3;3362:6;3282:93;:::i;:::-;3275:100;;3392:3;3385:10;;3130:271;;;;:::o;3407:313::-;3520:4;3558:2;3547:9;3543:18;3535:26;;3607:9;3601:4;3597:20;3593:1;3582:9;3578:17;3571:47;3635:78;3708:4;3699:6;3635:78;:::i;:::-;3627:86;;3407:313;;;;:::o;3726:419::-;3892:4;3930:2;3919:9;3915:18;3907:26;;3979:9;3973:4;3969:20;3965:1;3954:9;3950:17;3943:47;4007:131;4133:4;4007:131;:::i;:::-;3999:139;;3726:419;;;:::o;4151:::-;4317:4;4355:2;4344:9;4340:18;4332:26;;4404:9;4398:4;4394:20;4390:1;4379:9;4375:17;4368:47;4432:131;4558:4;4432:131;:::i;:::-;4424:139;;4151:419;;;:::o;4576:129::-;4610:6;4637:20;;:::i;:::-;4627:30;;4666:33;4694:4;4686:6;4666:33;:::i;:::-;4576:129;;;:::o;4711:75::-;4744:6;4777:2;4771:9;4761:19;;4711:75;:::o;4792:307::-;4853:4;4943:18;4935:6;4932:30;4929:56;;;4965:18;;:::i;:::-;4929:56;5003:29;5025:6;5003:29;:::i;:::-;4995:37;;5087:4;5081;5077:15;5069:23;;4792:307;;;:::o;5105:98::-;5156:6;5190:5;5184:12;5174:22;;5105:98;;;:::o;5209:99::-;5261:6;5295:5;5289:12;5279:22;;5209:99;;;:::o;5314:147::-;5415:11;5452:3;5437:18;;5314:147;;;;:::o;5467:169::-;5551:11;5585:6;5580:3;5573:19;5625:4;5620:3;5616:14;5601:29;;5467:169;;;;:::o;5642:191::-;5682:4;5702:20;5720:1;5702:20;:::i;:::-;5697:25;;5736:20;5754:1;5736:20;:::i;:::-;5731:25;;5775:1;5772;5769:8;5766:34;;;5780:18;;:::i;:::-;5766:34;5825:1;5822;5818:9;5810:17;;5642:191;;;;:::o;5839:96::-;5876:7;5905:24;5923:5;5905:24;:::i;:::-;5894:35;;5839:96;;;:::o;5941:126::-;5978:7;6018:42;6011:5;6007:54;5996:65;;5941:126;;;:::o;6073:77::-;6110:7;6139:5;6128:16;;6073:77;;;:::o;6156:307::-;6224:1;6234:113;6248:6;6245:1;6242:13;6234:113;;;6333:1;6328:3;6324:11;6318:18;6314:1;6309:3;6305:11;6298:39;6270:2;6267:1;6263:10;6258:15;;6234:113;;;6365:6;6362:1;6359:13;6356:101;;;6445:1;6436:6;6431:3;6427:16;6420:27;6356:101;6205:258;6156:307;;;:::o;6469:281::-;6552:27;6574:4;6552:27;:::i;:::-;6544:6;6540:40;6682:6;6670:10;6667:22;6646:18;6634:10;6631:34;6628:62;6625:88;;;6693:18;;:::i;:::-;6625:88;6733:10;6729:2;6722:22;6512:238;6469:281;;:::o;6756:180::-;6804:77;6801:1;6794:88;6901:4;6898:1;6891:15;6925:4;6922:1;6915:15;6942:180;6990:77;6987:1;6980:88;7087:4;7084:1;7077:15;7111:4;7108:1;7101:15;7128:180;7176:77;7173:1;7166:88;7273:4;7270:1;7263:15;7297:4;7294:1;7287:15;7314:117;7423:1;7420;7413:12;7437:117;7546:1;7543;7536:12;7560:117;7669:1;7666;7659:12;7683:117;7792:1;7789;7782:12;7806:102;7847:6;7898:2;7894:7;7889:2;7882:5;7878:14;7874:28;7864:38;;7806:102;;;:::o;7914:232::-;8054:34;8050:1;8042:6;8038:14;8031:58;8123:15;8118:2;8110:6;8106:15;8099:40;7914:232;:::o;8152:225::-;8292:34;8288:1;8280:6;8276:14;8269:58;8361:8;8356:2;8348:6;8344:15;8337:33;8152:225;:::o;8383:122::-;8456:24;8474:5;8456:24;:::i;:::-;8449:5;8446:35;8436:63;;8495:1;8492;8485:12;8436:63;8383:122;:::o;552:830:1:-;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@_418": { + "entryPoint": null, + "id": 418, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_426": { + "entryPoint": null, + "id": 426, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_beforeFallback_431": { + "entryPoint": 145, + "id": 431, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_delegate_391": { + "entryPoint": 162, + "id": 391, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@_fallback_410": { + "entryPoint": 29, + "id": 410, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@_getImplementation_94": { + "entryPoint": 405, + "id": 94, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@_implementation_61": { + "entryPoint": 147, + "id": 61, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@functionDelegateCall_670": { + "entryPoint": 55, + "id": 670, + "parameterSlots": 2, + "returnSlots": 1 + }, + "@functionDelegateCall_705": { + "entryPoint": 200, + "id": 705, + "parameterSlots": 3, + "returnSlots": 1 + }, + "@getAddressSlot_763": { + "entryPoint": 135, + "id": 763, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@isContract_460": { + "entryPoint": 100, + "id": 460, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@verifyCallResult_736": { + "entryPoint": 492, + "id": 736, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack": { + "entryPoint": 595, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack": { + "entryPoint": 644, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack": { + "entryPoint": 701, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { + "entryPoint": 736, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 759, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 793, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_length_t_bytes_memory_ptr": { + "entryPoint": 825, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_length_t_string_memory_ptr": { + "entryPoint": 836, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack": { + "entryPoint": 847, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "array_storeLengthForEncoding_t_string_memory_ptr_fromStack": { + "entryPoint": 858, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "copy_memory_to_memory": { + "entryPoint": 875, + "id": null, + "parameterSlots": 3, + "returnSlots": 0 + }, + "round_up_to_mul_of_32": { + "entryPoint": 926, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520": { + "entryPoint": 943, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:3335:7", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "115:265:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "125:52:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "171:5:7" + } + ], + "functionName": { + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "139:31:7" + }, + "nodeType": "YulFunctionCall", + "src": "139:38:7" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "129:6:7", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "186:95:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "269:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "274:6:7" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "193:75:7" + }, + "nodeType": "YulFunctionCall", + "src": "193:88:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "186:3:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "316:5:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "323:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "312:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "312:16:7" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "330:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "335:6:7" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "290:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "290:52:7" + }, + "nodeType": "YulExpressionStatement", + "src": "290:52:7" + }, + { + "nodeType": "YulAssignment", + "src": "351:23:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "362:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "367:6:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "358:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "358:16:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "351:3:7" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "96:5:7", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "103:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "111:3:7", + "type": "" + } + ], + "src": "7:373:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "478:272:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "488:53:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "535:5:7" + } + ], + "functionName": { + "name": "array_length_t_string_memory_ptr", + "nodeType": "YulIdentifier", + "src": "502:32:7" + }, + "nodeType": "YulFunctionCall", + "src": "502:39:7" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "492:6:7", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "550:78:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "616:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "621:6:7" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "557:58:7" + }, + "nodeType": "YulFunctionCall", + "src": "557:71:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "550:3:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "663:5:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "670:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "659:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "659:16:7" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "677:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "682:6:7" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "637:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "637:52:7" + }, + "nodeType": "YulExpressionStatement", + "src": "637:52:7" + }, + { + "nodeType": "YulAssignment", + "src": "698:46:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "709:3:7" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "736:6:7" + } + ], + "functionName": { + "name": "round_up_to_mul_of_32", + "nodeType": "YulIdentifier", + "src": "714:21:7" + }, + "nodeType": "YulFunctionCall", + "src": "714:29:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "705:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "705:39:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "698:3:7" + } + ] + } + ] + }, + "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "459:5:7", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "466:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "474:3:7", + "type": "" + } + ], + "src": "386:364:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "902:220:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "912:74:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "978:3:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "983:2:7", + "type": "", + "value": "38" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "919:58:7" + }, + "nodeType": "YulFunctionCall", + "src": "919:67:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "912:3:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1084:3:7" + } + ], + "functionName": { + "name": "store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520", + "nodeType": "YulIdentifier", + "src": "995:88:7" + }, + "nodeType": "YulFunctionCall", + "src": "995:93:7" + }, + "nodeType": "YulExpressionStatement", + "src": "995:93:7" + }, + { + "nodeType": "YulAssignment", + "src": "1097:19:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1108:3:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1113:2:7", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1104:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1104:12:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1097:3:7" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "890:3:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "898:3:7", + "type": "" + } + ], + "src": "756:366:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1262:137:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1273:100:7", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1360:6:7" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1369:3:7" + } + ], + "functionName": { + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "1280:79:7" + }, + "nodeType": "YulFunctionCall", + "src": "1280:93:7" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1273:3:7" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1383:10:7", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1390:3:7" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1383:3:7" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1241:3:7", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1247:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1258:3:7", + "type": "" + } + ], + "src": "1128:271:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1523:195:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1533:26:7", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1545:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1556:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1541:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1541:18:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1533:4:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1580:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1591:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1576:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1576:17:7" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1599:4:7" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1605:9:7" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1595:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1595:20:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1569:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "1569:47:7" + }, + "nodeType": "YulExpressionStatement", + "src": "1569:47:7" + }, + { + "nodeType": "YulAssignment", + "src": "1625:86:7", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1697:6:7" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1706:4:7" + } + ], + "functionName": { + "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "1633:63:7" + }, + "nodeType": "YulFunctionCall", + "src": "1633:78:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1625:4:7" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1495:9:7", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1507:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1518:4:7", + "type": "" + } + ], + "src": "1405:313:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1895:248:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1905:26:7", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1917:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1928:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1913:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1913:18:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1905:4:7" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1952:9:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1963:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1948:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1948:17:7" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1971:4:7" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1977:9:7" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1967:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "1967:20:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1941:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "1941:47:7" + }, + "nodeType": "YulExpressionStatement", + "src": "1941:47:7" + }, + { + "nodeType": "YulAssignment", + "src": "1997:139:7", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "2131:4:7" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "2005:124:7" + }, + "nodeType": "YulFunctionCall", + "src": "2005:131:7" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1997:4:7" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1875:9:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1890:4:7", + "type": "" + } + ], + "src": "1724:419:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2207:40:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2218:22:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2234:5:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2228:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "2228:12:7" + }, + "variableNames": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2218:6:7" + } + ] + } + ] + }, + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2190:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2200:6:7", + "type": "" + } + ], + "src": "2149:98:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2312:40:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2323:22:7", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2339:5:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2333:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "2333:12:7" + }, + "variableNames": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2323:6:7" + } + ] + } + ] + }, + "name": "array_length_t_string_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2295:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2305:6:7", + "type": "" + } + ], + "src": "2253:99:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2471:34:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2481:18:7", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2496:3:7" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "2481:11:7" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2443:3:7", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2448:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "2459:11:7", + "type": "" + } + ], + "src": "2358:147:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2607:73:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2624:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2629:6:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2617:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "2617:19:7" + }, + "nodeType": "YulExpressionStatement", + "src": "2617:19:7" + }, + { + "nodeType": "YulAssignment", + "src": "2645:29:7", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2664:3:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2669:4:7", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2660:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "2660:14:7" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "2645:11:7" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2579:3:7", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2584:6:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "2595:11:7", + "type": "" + } + ], + "src": "2511:169:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2735:258:7", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2745:10:7", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2754:1:7", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "2749:1:7", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2814:63:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2839:3:7" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2844:1:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2835:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "2835:11:7" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "2858:3:7" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2863:1:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2854:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "2854:11:7" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2848:5:7" + }, + "nodeType": "YulFunctionCall", + "src": "2848:18:7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2828:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "2828:39:7" + }, + "nodeType": "YulExpressionStatement", + "src": "2828:39:7" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2775:1:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2778:6:7" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "2772:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "2772:13:7" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "2786:19:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2788:15:7", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2797:1:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2800:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2793:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "2793:10:7" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2788:1:7" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "2768:3:7", + "statements": [] + }, + "src": "2764:113:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2911:76:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2961:3:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2966:6:7" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2957:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "2957:16:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2975:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2950:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "2950:27:7" + }, + "nodeType": "YulExpressionStatement", + "src": "2950:27:7" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2892:1:7" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2895:6:7" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2889:2:7" + }, + "nodeType": "YulFunctionCall", + "src": "2889:13:7" + }, + "nodeType": "YulIf", + "src": "2886:101:7" + } + ] + }, + "name": "copy_memory_to_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "2717:3:7", + "type": "" + }, + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "2722:3:7", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2727:6:7", + "type": "" + } + ], + "src": "2686:307:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3047:54:7", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3057:38:7", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3075:5:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3082:2:7", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3071:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3071:14:7" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3091:2:7", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "3087:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3087:7:7" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "3067:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3067:28:7" + }, + "variableNames": [ + { + "name": "result", + "nodeType": "YulIdentifier", + "src": "3057:6:7" + } + ] + } + ] + }, + "name": "round_up_to_mul_of_32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3030:5:7", + "type": "" + } + ], + "returnVariables": [ + { + "name": "result", + "nodeType": "YulTypedName", + "src": "3040:6:7", + "type": "" + } + ], + "src": "2999:102:7" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3213:119:7", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3235:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3243:1:7", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3231:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3231:14:7" + }, + { + "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", + "kind": "string", + "nodeType": "YulLiteral", + "src": "3247:34:7", + "type": "", + "value": "Address: delegate call to non-co" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3224:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "3224:58:7" + }, + "nodeType": "YulExpressionStatement", + "src": "3224:58:7" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3303:6:7" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3311:2:7", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3299:3:7" + }, + "nodeType": "YulFunctionCall", + "src": "3299:15:7" + }, + { + "hexValue": "6e7472616374", + "kind": "string", + "nodeType": "YulLiteral", + "src": "3316:8:7", + "type": "", + "value": "ntract" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3292:6:7" + }, + "nodeType": "YulFunctionCall", + "src": "3292:33:7" + }, + "nodeType": "YulExpressionStatement", + "src": "3292:33:7" + } + ] + }, + "name": "store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "3205:6:7", + "type": "" + } + ], + "src": "3107:225:7" + } + ] + }, + "contents": "{\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function store_literal_in_memory_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520(memPtr) {\n\n mstore(add(memPtr, 0), \"Address: delegate call to non-co\")\n\n mstore(add(memPtr, 32), \"ntract\")\n\n }\n\n}\n", + "id": 7, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103ff602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d610195565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606100d384610064565b610112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010990610319565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161013a91906102e0565b600060405180830381855af49150503d8060008114610175576040519150601f19603f3d011682016040523d82523d6000602084013e61017a565b606091505b509150915061018a8282866101ec565b925050509392505050565b60006101c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156101fc5782905061024c565b60008351111561020f5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024391906102f7565b60405180910390fd5b9392505050565b600061025e82610339565b610268818561034f565b935061027881856020860161036b565b80840191505092915050565b600061028f82610344565b610299818561035a565b93506102a981856020860161036b565b6102b28161039e565b840191505092915050565b60006102ca60268361035a565b91506102d5826103af565b604082019050919050565b60006102ec8284610253565b915081905092915050565b600060208201905081810360008301526103118184610284565b905092915050565b60006020820190508181036000830152610332816102bd565b9050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60005b8381101561038957808201518184015260208101905061036e565b83811115610398576000848401525b50505050565b6000601f19601f8301169050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e7472616374000000000000000000000000000000000000000000000000000060208201525056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ee71d3e64d2bf477a4558de3b7a5544a8eae3b46719e174bafaba2b7f0d132bb64736f6c63430008070033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x1D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B PUSH2 0x1D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x25 PUSH2 0x91 JUMP JUMPDEST PUSH2 0x35 PUSH2 0x30 PUSH2 0x93 JUMP JUMPDEST PUSH2 0xA2 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x5C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3FF PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xC8 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE GT SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9D PUSH2 0x195 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC3 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH2 0xD3 DUP5 PUSH2 0x64 JUMP JUMPDEST PUSH2 0x112 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x109 SWAP1 PUSH2 0x319 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x13A SWAP2 SWAP1 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x175 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x17A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x18A DUP3 DUP3 DUP7 PUSH2 0x1EC JUMP JUMPDEST SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C3 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL PUSH2 0x87 JUMP JUMPDEST PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1FC JUMPI DUP3 SWAP1 POP PUSH2 0x24C JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD GT ISZERO PUSH2 0x20F JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x243 SWAP2 SWAP1 PUSH2 0x2F7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25E DUP3 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x268 DUP2 DUP6 PUSH2 0x34F JUMP JUMPDEST SWAP4 POP PUSH2 0x278 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x36B JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28F DUP3 PUSH2 0x344 JUMP JUMPDEST PUSH2 0x299 DUP2 DUP6 PUSH2 0x35A JUMP JUMPDEST SWAP4 POP PUSH2 0x2A9 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x36B JUMP JUMPDEST PUSH2 0x2B2 DUP2 PUSH2 0x39E JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CA PUSH1 0x26 DUP4 PUSH2 0x35A JUMP JUMPDEST SWAP2 POP PUSH2 0x2D5 DUP3 PUSH2 0x3AF JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EC DUP3 DUP5 PUSH2 0x253 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x311 DUP2 DUP5 PUSH2 0x284 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x332 DUP2 PUSH2 0x2BD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x389 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x36E JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x398 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x70667358221220EE71D3 0xE6 0x4D 0x2B DELEGATECALL PUSH24 0xA4558DE3B7A5544A8EAE3B46719E174BAFABA2B7F0D132BB PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ", + "sourceMap": "552:830:1:-:0;;;;;;2898:11:3;:9;:11::i;:::-;552:830:1;;2675:11:3;:9;:11::i;:::-;552:830:1;2322:110:3;2370:17;:15;:17::i;:::-;2397:28;2407:17;:15;:17::i;:::-;2397:9;:28::i;:::-;2322:110::o;6570:198:5:-;6653:12;6684:77;6705:6;6713:4;6684:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6677:84;;6570:198;;;;:::o;1175:320::-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;1599:147:6:-;1660:21;1726:4;1716:14;;1599:147;;;:::o;3197:46:3:-;:::o;1240:140:1:-;1307:12;1338:35;:33;:35::i;:::-;1331:42;;1240:140;:::o;948:895:3:-;1286:14;1283:1;1280;1267:34;1500:1;1497;1481:14;1478:1;1462:14;1455:5;1442:60;1576:16;1573:1;1570;1555:38;1614:6;1686:1;1681:66;;;;1796:16;1793:1;1786:27;1681:66;1716:16;1713:1;1706:27;6954:387:5;7095:12;7127:18;7138:6;7127:10;:18::i;:::-;7119:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7200:12;7214:23;7241:6;:19;;7261:4;7241:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7199:67;;;;7283:51;7300:7;7309:10;7321:12;7283:16;:51::i;:::-;7276:58;;;;6954:387;;;;;:::o;1301:140:2:-;1354:7;1380:48;1030:66;1407:20;;1380:26;:48::i;:::-;:54;;;;;;;;;;;;1373:61;;1301:140;:::o;7561:692:5:-;7707:12;7735:7;7731:516;;;7765:10;7758:17;;;;7731:516;7896:1;7876:10;:17;:21;7872:365;;;8070:10;8064:17;8130:15;8117:10;8113:2;8109:19;8102:44;7872:365;8209:12;8202:20;;;;;;;;;;;:::i;:::-;;;;;;;;7561:692;;;;;;:::o;7:373:7:-;111:3;139:38;171:5;139:38;:::i;:::-;193:88;274:6;269:3;193:88;:::i;:::-;186:95;;290:52;335:6;330:3;323:4;316:5;312:16;290:52;:::i;:::-;367:6;362:3;358:16;351:23;;115:265;7:373;;;;:::o;386:364::-;474:3;502:39;535:5;502:39;:::i;:::-;557:71;621:6;616:3;557:71;:::i;:::-;550:78;;637:52;682:6;677:3;670:4;663:5;659:16;637:52;:::i;:::-;714:29;736:6;714:29;:::i;:::-;709:3;705:39;698:46;;478:272;386:364;;;;:::o;756:366::-;898:3;919:67;983:2;978:3;919:67;:::i;:::-;912:74;;995:93;1084:3;995:93;:::i;:::-;1113:2;1108:3;1104:12;1097:19;;756:366;;;:::o;1128:271::-;1258:3;1280:93;1369:3;1360:6;1280:93;:::i;:::-;1273:100;;1390:3;1383:10;;1128:271;;;;:::o;1405:313::-;1518:4;1556:2;1545:9;1541:18;1533:26;;1605:9;1599:4;1595:20;1591:1;1580:9;1576:17;1569:47;1633:78;1706:4;1697:6;1633:78;:::i;:::-;1625:86;;1405:313;;;;:::o;1724:419::-;1890:4;1928:2;1917:9;1913:18;1905:26;;1977:9;1971:4;1967:20;1963:1;1952:9;1948:17;1941:47;2005:131;2131:4;2005:131;:::i;:::-;1997:139;;1724:419;;;:::o;2149:98::-;2200:6;2234:5;2228:12;2218:22;;2149:98;;;:::o;2253:99::-;2305:6;2339:5;2333:12;2323:22;;2253:99;;;:::o;2358:147::-;2459:11;2496:3;2481:18;;2358:147;;;;:::o;2511:169::-;2595:11;2629:6;2624:3;2617:19;2669:4;2664:3;2660:14;2645:29;;2511:169;;;;:::o;2686:307::-;2754:1;2764:113;2778:6;2775:1;2772:13;2764:113;;;2863:1;2858:3;2854:11;2848:18;2844:1;2839:3;2835:11;2828:39;2800:2;2797:1;2793:10;2788:15;;2764:113;;;2895:6;2892:1;2889:13;2886:101;;;2975:1;2966:6;2961:3;2957:16;2950:27;2886:101;2735:258;2686:307;;;:::o;2999:102::-;3040:6;3091:2;3087:7;3082:2;3075:5;3071:14;3067:28;3057:38;;2999:102;;;:::o;3107:225::-;3247:34;3243:1;3235:6;3231:14;3224:58;3316:8;3311:2;3303:6;3299:15;3292:33;3107:225;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "223000", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "": "infinite" + }, + "internal": { + "_implementation()": "2249" + } + }, + "methodIdentifiers": {} + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_identity_invalid.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_identity_invalid.json new file mode 100644 index 0000000..e09a353 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_identity_invalid.json @@ -0,0 +1,42 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "1b342155-ae58-460d-8f41-8dea520a2126:string:EMBEDDED_RENDERER", + "name": "0c7723fd-b370-4e05-951c-fd79a4bce3a6:string:CHAFTA_COO", + "url": "c642e700-25af-48d2-a84a-316d3a866489:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "08c78bbc-2bc4-4ba3-a2a3-b1818613a639:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "4ff2f582-363b-463f-a3a3-bceb62124600:string:My Test Issuer", + "revocation": { + "type": "9fa71f1e-58fe-490f-ba97-27cb1edacb0a:string:NONE" + }, + "identityProof": { + "type": "903996ec-0287-452b-8695-03413955f1ea:string:DNS-DID", + "location": "5e5a824c-2167-4964-a7ff-2fc959e0274f:string:demo-invalid-identity.tradetrust.io", + "key": "638f054c-b2bc-4f90-991b-f9ff854bff89:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "recipient": { + "name": "d2e13886-5e36-4f72-8e93-ca75c3fe6958:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "87ba72e7e1047c1e3b177ade8f8066f9c20ad1a67922ab13127cc7d6c6cbb4e2", + "proof": [], + "merkleRoot": "87ba72e7e1047c1e3b177ade8f8066f9c20ad1a67922ab13127cc7d6c6cbb4e2" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-10T07:20:50.260Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0xda86a67b0217bb162d2d1f8003b42231c89df3b924c8aab410cee9089516321826aeff00d516f3024af96f87bd30361f111b85e0b8b62537e01ba2a1225c5f2e1c" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_ocsp.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_ocsp.json new file mode 100644 index 0000000..4e61740 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_ocsp.json @@ -0,0 +1,43 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "8b65fbfd-95fe-43da-83ea-166651b0d42e:string:EMBEDDED_RENDERER", + "name": "11390281-0707-416f-8dff-9bf2affc0502:string:CHAFTA_COO", + "url": "215657ae-6c5a-4486-8348-36876ee6048a:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "35b4a5e9-43a9-4726-9110-8bd5dc1a1bcb:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "d045c76b-c85b-4d30-b700-1e319016973d:string:My Test Issuer", + "revocation": { + "type": "2d5e29c4-1708-4363-9975-254988772f0a:string:OCSP_RESPONDER", + "location": "7f65a7a9-aa58-4fcf-9258-96e03317b892:string:https://ocsp.example.com" + }, + "identityProof": { + "type": "a83ea305-ab4e-4a14-9e90-f85f74b1ab54:string:DNS-DID", + "location": "980fdfcd-323e-4285-81a5-a2325dc1e061:string:example.tradetrust.io", + "key": "06855d31-09d6-455a-8675-e61a773a1ccd:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "recipient": { + "name": "74539e12-f986-4f44-b4ab-f9a8b066fdb7:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "b2c5fb52c6f2a85638c0ebf488fab92453e22e5728a5ea0e3d8d5076f39279b4", + "proof": [], + "merkleRoot": "b2c5fb52c6f2a85638c0ebf488fab92453e22e5728a5ea0e3d8d5076f39279b4" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-10T07:21:02.257Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x41d751c6da151a8d215b957a09d112cf7afa686559695cdeb9e10b4efaceb153619be2ffc2dcd4f6a7665478d74a21ae254198b57fc10d6d2877557e9f4707c91b" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_no_contract.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_no_contract.json new file mode 100644 index 0000000..f3f615f --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_no_contract.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "24b31182-8fc5-42b5-bd3a-682406a275bd:string:EMBEDDED_RENDERER", + "name": "aae74ca8-98ea-4350-91cb-b22422bd9c88:string:CHAFTA_COO", + "url": "52e15512-769e-4aa0-a237-28cc8fedfbe1:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "2a8696cf-5fac-470b-b060-d4abe482c996:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "a84fbd45-0dec-4f4c-a81f-58b363609ecd:string:X", + "revocation": { + "type": "36ae7a9f-c426-409c-9932-447e6ae15e36:string:REVOCATION_STORE", + "location": "7cd4e446-bd9c-47f0-8ce7-b01a29d027d0:string:0x000000000000000000000000000000000000bEEF" + }, + "identityProof": { + "type": "74616d86-0f3b-4db1-b84c-e0ee60ecfffe:string:DNS-DID", + "location": "eeae5cd8-f674-489c-a117-ad89b5c64c84:string:example.tradetrust.io", + "key": "bbf3c814-3a34-4779-becb-888adbf507bd:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "network": { + "chain": "964da269-6bd6-4417-9b87-35838851e5e5:string:ETH", + "chainId": "6af3d1a2-ce8f-4dcb-8f85-a45e58a0891a:string:1337" + }, + "recipient": { + "name": "2429d6b5-09a4-41a2-b07a-3c9800d051f2:string:x" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "88b79390bcb1386a5beae170c39c68ce6b8112459e41c60829289169507b4c23", + "proof": [], + "merkleRoot": "88b79390bcb1386a5beae170c39c68ce6b8112459e41c60829289169507b4c23" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-15T09:17:59.589Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x795fab7fa9090837ad0eced7c5854bd90a91f8bfe999c90d4fee287c1861766931e44e6042017c4bc7c1dc09617affc06b0921dceb3db4402292f8ae3dc81a1f1b" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_not_revoked.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_not_revoked.json new file mode 100644 index 0000000..a5801e7 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_not_revoked.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "ce7bdb69-539e-428c-8528-d6ad178dbc51:string:EMBEDDED_RENDERER", + "name": "6d3a8381-f4ba-4be9-8c36-fa175cf67e21:string:CHAFTA_COO", + "url": "86779cea-34d0-4d91-ae3a-ed2c9240ef86:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "cfe068a5-ee6c-4611-9827-d94ba8a1f43a:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "ae235687-1dec-4f7d-b305-bf02b12ab6b4:string:X", + "revocation": { + "type": "51756339-e828-4d18-8104-cc7f683ea070:string:REVOCATION_STORE", + "location": "60a92a70-2dea-494c-ae03-30209af13611:string:0x057ef64E23666F000b34aE31332854aCBd1c8544" + }, + "identityProof": { + "type": "3605b23e-12d9-4962-a71d-4963b68b152a:string:DNS-DID", + "location": "117c957e-1d1f-4d96-a19b-d97bfc510952:string:example.tradetrust.io", + "key": "385ce41f-7300-4c2a-ab77-d2330b947714:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "network": { + "chain": "ebf5a03e-999d-4af5-ae34-1f08abbcf57d:string:ETH", + "chainId": "13dfc1be-dc7a-44eb-a13d-85356e4a4160:string:1337" + }, + "recipient": { + "name": "35cda349-7e04-497a-a0da-059d40e06198:string:REVSTORE-NOT-REVOKED" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "ebf9daa3ba4bb4c497a30e765e63fa37d2c234eedd9a30c23b1d84763f39e046", + "proof": [], + "merkleRoot": "ebf9daa3ba4bb4c497a30e765e63fa37d2c234eedd9a30c23b1d84763f39e046" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-15T08:46:03.121Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x593dee6b3cbbc29113c838b76e40b2dcbe2891c6f8f3b70c8dc3f76771c558597ff9916a54d731af9f3d68120678ea952ee86a8fc623e757b1279ba0690a5d801b" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_revoked.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_revoked.json new file mode 100644 index 0000000..45af54b --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_revocationstore_revoked.json @@ -0,0 +1,47 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "00163bbe-aca5-4bcb-b8c9-38f5b0ca30f2:string:EMBEDDED_RENDERER", + "name": "6628b470-fd0e-4671-b0d7-75e3b26021e8:string:CHAFTA_COO", + "url": "58d993f1-7cd9-46dc-9fa7-dfd693e578d4:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "4493dbcd-4631-4840-84d9-ba309a6785ff:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "488158b6-9e24-4a3e-ba1b-1819c641c2f6:string:X", + "revocation": { + "type": "99bf29b8-8fa3-4b32-b446-fe49868086ad:string:REVOCATION_STORE", + "location": "f42022c2-12f5-4e13-8f04-885cb7d78e43:string:0x057ef64E23666F000b34aE31332854aCBd1c8544" + }, + "identityProof": { + "type": "9b6163a7-8449-4228-a247-4a8b659dff18:string:DNS-DID", + "location": "34cdf779-3daf-469b-a18a-b83ba847f057:string:example.tradetrust.io", + "key": "ee0e0350-b723-4de4-be6c-5b35516daa07:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "network": { + "chain": "8ecf5849-a5e6-4ceb-abad-b4e1f4ad452a:string:ETH", + "chainId": "7f360e4a-7c44-4ac7-871a-72b38dbe42d6:string:1337" + }, + "recipient": { + "name": "48f79c7e-2f15-4ec6-815a-e3d3b34fa462:string:REVSTORE-REVOKED" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "1edea2001ccb702ed3484b3cbd07366c79c870c803bbf379b96486bca9e97ff6", + "proof": [], + "merkleRoot": "1edea2001ccb702ed3484b3cbd07366c79c870c803bbf379b96486bca9e97ff6" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-15T08:46:03.114Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0x9370c759347ea6acd2837daf7fb69f538dfc4c6b8ac08d6ce273920b5b8670f25c57e0bbdd08cc3e43d8cc5f56d4870bcc6a251325b9dc22d09e9eb2deeceb4a1b" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_tampered.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_tampered.json new file mode 100644 index 0000000..190298d --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_tampered.json @@ -0,0 +1,42 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "234694b2-4d93-46ab-8ae0-2c4eaf58576b:string:EMBEDDED_RENDERER", + "name": "326e60c5-26bc-4cb3-90a7-fedd88d0a405:string:CHAFTA_COO", + "url": "3b4bdcb0-fa82-4ed9-99c1-4c228d7e8a07:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "80627005-ef95-4433-9713-8a5e096f5ccd:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "ddca0c96-faa9-4f5c-8256-7422b36df1fe:string:My Test Issuer", + "revocation": { + "type": "2511ad28-b5e2-472a-883f-76f7bb5acba2:string:NONE" + }, + "identityProof": { + "type": "3e3a43f9-d70c-4a8e-ab7a-811a185c61b7:string:DNS-DID", + "location": "eb845f4f-e7b7-4811-af9a-3dcbcdb922fd:string:example.tradetrust.io", + "key": "11cf1638-fd0f-464b-921d-a2c4ce0cc7d3:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "recipient": { + "name": "7ad580a1-79d4-41aa-83f2-88715703f9d6:string:TAMPERED VALUE" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "226d0b680a1140241f5cc10039a295c4ad84719c61e9dfa3431e82fd30de5caa", + "proof": [], + "merkleRoot": "226d0b680a1140241f5cc10039a295c4ad84719c61e9dfa3431e82fd30de5caa" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-10T08:57:04.774Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0xf6a6c35491b64064addf912e77192b7b02bdf414746497064c17f39f36fa1aba4367b691de25afa8195b78e37d505bf87c24ceff00024a95cfe543fe0127a30a1c" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnsdid_valid.json b/e2e/fixtures/local/oa/oa_v2_dnsdid_valid.json new file mode 100644 index 0000000..33f0718 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnsdid_valid.json @@ -0,0 +1,42 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "234694b2-4d93-46ab-8ae0-2c4eaf58576b:string:EMBEDDED_RENDERER", + "name": "326e60c5-26bc-4cb3-90a7-fedd88d0a405:string:CHAFTA_COO", + "url": "3b4bdcb0-fa82-4ed9-99c1-4c228d7e8a07:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "80627005-ef95-4433-9713-8a5e096f5ccd:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89", + "name": "ddca0c96-faa9-4f5c-8256-7422b36df1fe:string:My Test Issuer", + "revocation": { + "type": "2511ad28-b5e2-472a-883f-76f7bb5acba2:string:NONE" + }, + "identityProof": { + "type": "3e3a43f9-d70c-4a8e-ab7a-811a185c61b7:string:DNS-DID", + "location": "eb845f4f-e7b7-4811-af9a-3dcbcdb922fd:string:example.tradetrust.io", + "key": "11cf1638-fd0f-464b-921d-a2c4ce0cc7d3:string:did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller" + } + } + ], + "recipient": { + "name": "7ad580a1-79d4-41aa-83f2-88715703f9d6:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "226d0b680a1140241f5cc10039a295c4ad84719c61e9dfa3431e82fd30de5caa", + "proof": [], + "merkleRoot": "226d0b680a1140241f5cc10039a295c4ad84719c61e9dfa3431e82fd30de5caa" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2026-06-10T08:57:04.774Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89#controller", + "signature": "0xf6a6c35491b64064addf912e77192b7b02bdf414746497064c17f39f36fa1aba4367b691de25afa8195b78e37d505bf87c24ceff00024a95cfe543fe0127a30a1c" + } + ] +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_no_contract.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_no_contract.json new file mode 100644 index 0000000..305f0ff --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_no_contract.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "6aff1491-30d0-4481-a2fd-9a7009c68775:string:EMBEDDED_RENDERER", + "name": "a8b368cd-1d0e-411f-99dd-f5865fc66db7:string:CHAFTA_COO", + "url": "534d1e8d-a1c1-4c59-93d5-edeef6af9626:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "7a8a3f9b-0d82-4277-83f7-fb240c9d0834:string:X", + "documentStore": "0f2dce91-e954-4599-b82d-dc98dc597821:string:0x000000000000000000000000000000000000bEEF", + "identityProof": { + "type": "7b1096af-8490-4dc3-8078-365b550e6909:string:DNS-TXT", + "location": "b217eff6-5d5f-4388-a22d-ecfb930b4588:string:issuer.example" + } + } + ], + "network": { + "chain": "87c19dbd-952d-4974-9a00-3169124325e2:string:ETH", + "chainId": "c09cfddf-5826-4f2f-a873-95d300a5ab0e:string:1337" + }, + "recipient": { + "name": "4dd09d19-a24d-441e-9f27-2a44c3810d86:string:x" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "b39012d7890d8c0d8a1061a3e1028016c151825d4f45df7c07eec014c81583ac", + "proof": [], + "merkleRoot": "b39012d7890d8c0d8a1061a3e1028016c151825d4f45df7c07eec014c81583ac" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_not_issued.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_not_issued.json new file mode 100644 index 0000000..1797958 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_not_issued.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "e8a988ca-d964-4314-8cbc-045ff6d56a99:string:EMBEDDED_RENDERER", + "name": "1020a1b0-602f-4267-bc4f-cb50265e44e4:string:CHAFTA_COO", + "url": "1aa57ba3-d9c2-49be-8670-2d9e91ed0101:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "f3240360-4a8d-4a71-b23d-4617d6891738:string:My Test Issuer", + "documentStore": "630eaf2e-b725-4057-9807-e28257049f84:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "7df7f6e5-ca1c-491f-93bf-65c122e48138:string:DNS-TXT", + "location": "e647fd92-ac54-404b-8258-de7a469d3302:string:issuer.example" + } + } + ], + "network": { + "chain": "2ba1e15a-9dc9-4b35-8241-efac80b9c457:string:ETH", + "chainId": "700dacc1-8e34-445b-8944-e44ef7d39265:string:1337" + }, + "recipient": { + "name": "bc582725-a658-41a6-affd-98d51dfa3e6c:string:TrustVC E2E Test" + }, + "cooId": "79265eb8-bf56-4350-88c4-87d0078ff330:string:COO-NOTISSUED-001" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "1a442765be78cc6c706a4a637cea7faa63a2841cc92b1715418d00fd6b76b895", + "proof": [], + "merkleRoot": "1a442765be78cc6c706a4a637cea7faa63a2841cc92b1715418d00fd6b76b895" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_revoked.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_revoked.json new file mode 100644 index 0000000..4942355 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_revoked.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "397d740b-25d8-4d9e-bb50-9f844e418803:string:EMBEDDED_RENDERER", + "name": "10151114-ef33-4cb0-89ac-c441c5619d82:string:CHAFTA_COO", + "url": "b031c3d5-9feb-4c87-a6a4-1de38e4a03eb:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "9c200e72-f70a-49e6-a086-8c0775dbcfea:string:My Test Issuer", + "documentStore": "41b8e593-6f0e-4eec-a4a2-f13a0ea1e63a:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "4720516a-39f1-42ab-9990-974f2761cbe5:string:DNS-TXT", + "location": "f0030d99-4d08-41aa-b433-fec0ce0318a2:string:issuer.example" + } + } + ], + "network": { + "chain": "0fcaff66-ba86-44f0-9080-b4edfc8ac56a:string:ETH", + "chainId": "39c7599f-475d-4f50-865e-f8375d746f55:string:1337" + }, + "recipient": { + "name": "e67eec6e-24f1-4b07-bb97-c651a23be2bb:string:TrustVC E2E Test" + }, + "cooId": "7adb192e-f98e-452f-b7e8-053dfa4844cd:string:COO-REVOKED-001" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "a24c4e7e3f441de3b0466c88c862fa66e513180d723b9799fe07f1594a9ca07d", + "proof": [], + "merkleRoot": "a24c4e7e3f441de3b0466c88c862fa66e513180d723b9799fe07f1594a9ca07d" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_tampered.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_tampered.json new file mode 100644 index 0000000..fb14a37 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_tampered.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "328ee1a9-3375-41e2-9551-a72b33e8001d:string:EMBEDDED_RENDERER", + "name": "985060c5-4773-4d4c-b8b5-17afdfc37b3a:string:CHAFTA_COO", + "url": "7a283a5e-8959-499d-b0ae-5b903c5a1fa8:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "9f6293a1-07cd-45fc-b243-867be2564745:string:My Test Issuer", + "documentStore": "7411ed2c-fae0-406e-88dd-eee6f1c342c6:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "fa36be4f-881a-4ae2-8aa8-a8f532dd3d78:string:DNS-TXT", + "location": "ef571458-fea1-4eac-ae76-376b3146068f:string:issuer.example" + } + } + ], + "network": { + "chain": "3617e8a0-99e8-4e35-96b5-9a0fafa31200:string:ETH", + "chainId": "53c9bd03-b49c-430b-81a1-9a8c41dd6f8d:string:1337" + }, + "recipient": { + "name": "f3e2b74c-0cf3-4985-8769-d1a81cf9f6c9:string:TAMPERED VALUE" + }, + "cooId": "78a19473-15e3-4fa1-bcbd-bcac8c717945:string:COO-ISSUED-001" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "d0359643795f10b3f69ce0a1969c67eba53ce3cdcc050fc549b768c04bb92b4a", + "proof": [], + "merkleRoot": "d0359643795f10b3f69ce0a1969c67eba53ce3cdcc050fc549b768c04bb92b4a" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_valid.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_valid.json new file mode 100644 index 0000000..507fe9f --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_docstore_valid.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "328ee1a9-3375-41e2-9551-a72b33e8001d:string:EMBEDDED_RENDERER", + "name": "985060c5-4773-4d4c-b8b5-17afdfc37b3a:string:CHAFTA_COO", + "url": "7a283a5e-8959-499d-b0ae-5b903c5a1fa8:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "9f6293a1-07cd-45fc-b243-867be2564745:string:My Test Issuer", + "documentStore": "7411ed2c-fae0-406e-88dd-eee6f1c342c6:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "fa36be4f-881a-4ae2-8aa8-a8f532dd3d78:string:DNS-TXT", + "location": "ef571458-fea1-4eac-ae76-376b3146068f:string:issuer.example" + } + } + ], + "network": { + "chain": "3617e8a0-99e8-4e35-96b5-9a0fafa31200:string:ETH", + "chainId": "53c9bd03-b49c-430b-81a1-9a8c41dd6f8d:string:1337" + }, + "recipient": { + "name": "f3e2b74c-0cf3-4985-8769-d1a81cf9f6c9:string:TrustVC E2E Test" + }, + "cooId": "78a19473-15e3-4fa1-bcbd-bcac8c717945:string:COO-ISSUED-001" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "d0359643795f10b3f69ce0a1969c67eba53ce3cdcc050fc549b768c04bb92b4a", + "proof": [], + "merkleRoot": "d0359643795f10b3f69ce0a1969c67eba53ce3cdcc050fc549b768c04bb92b4a" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_identity_invalid.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_identity_invalid.json new file mode 100644 index 0000000..679a885 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_identity_invalid.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "3bffed96-8279-4dcd-9995-5f010719a626:string:EMBEDDED_RENDERER", + "name": "b757f3a1-170c-46b5-b887-030d46b83b05:string:CHAFTA_COO", + "url": "402d5d29-35c6-4ce3-86e4-71b1db00fb01:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "d26210ad-4b1e-4539-a247-19a7e94dff25:string:My Test Issuer", + "documentStore": "0d6e659e-7b6d-44b5-b986-6c2a45919de0:string:0x057ef64E23666F000b34aE31332854aCBd1c8544", + "identityProof": { + "type": "d45aa184-eb71-43a5-adb5-3915bc2909fa:string:DNS-TXT", + "location": "e163bcf4-f139-4a70-9d57-843885fd2a30:string:demo-invalid-identity.tradetrust.io" + } + } + ], + "network": { + "chain": "dded0adc-84ce-4f7c-b08e-2798407e5e26:string:ETH", + "chainId": "c08bbc52-1f1b-4611-8d53-3dbba9c14a82:string:1337" + }, + "recipient": { + "name": "23a7bc75-d16c-4d6a-92d1-dea3d2726c47:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "6ad1a501ebbb827455195b7012b0e1fa0dda2052111831d95fa1e8fbf370fa0b", + "proof": [], + "merkleRoot": "6ad1a501ebbb827455195b7012b0e1fa0dda2052111831d95fa1e8fbf370fa0b" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_no_contract.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_no_contract.json new file mode 100644 index 0000000..fef94cd --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_no_contract.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "a3954be6-a5b4-4e9c-804c-6021c06be5d5:string:EMBEDDED_RENDERER", + "name": "338a9ef5-3232-4b67-b8c3-255cef782767:string:CHAFTA_COO", + "url": "bbe22bfe-bc38-48fb-b4d0-29f2834fd715:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "86a3e681-8d0a-4a0c-829d-060e0031918f:string:X", + "tokenRegistry": "2cdc5860-7b46-4cd5-b52f-eee3a6fa5fb7:string:0x000000000000000000000000000000000000bEEF", + "identityProof": { + "type": "57abfe59-0282-4a5d-a37c-c9c85c46202c:string:DNS-TXT", + "location": "ad3faee7-c419-4564-8ce6-cb76d8ac271d:string:issuer.example" + } + } + ], + "network": { + "chain": "8eebe664-5d40-47bf-a6ac-efcf7e4a2043:string:ETH", + "chainId": "c5c5a5fc-0ef3-4443-865d-ff9ce148e42a:string:1337" + }, + "recipient": { + "name": "9538865b-8dc1-41bb-91dd-65a044e58e00:string:x" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "30d333439bff26f8490918eea679b2ac7acf6425eb342fed254cba98cbe47242", + "proof": [], + "merkleRoot": "30d333439bff26f8490918eea679b2ac7acf6425eb342fed254cba98cbe47242" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_not_minted.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_not_minted.json new file mode 100644 index 0000000..8014e59 --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_not_minted.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "eeadf0cc-edf8-4259-a808-19843317c773:string:EMBEDDED_RENDERER", + "name": "ad623609-96c7-48d3-941c-2f49f03ab2e8:string:CHAFTA_COO", + "url": "0c9fd63d-3ba1-4716-a847-cbabd4ebf0a5:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "b5351281-591d-4474-99af-118340898cfe:string:My Test Issuer", + "tokenRegistry": "f232978d-4021-4162-9c8c-1130fb5cedd5:string:0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "identityProof": { + "type": "c791d193-8140-4646-9f72-d810bb7bb455:string:DNS-TXT", + "location": "0df47c6f-3fb8-43aa-91ca-149252053d41:string:issuer.example" + } + } + ], + "network": { + "chain": "77c62172-7ad9-4124-a3ac-111540b238d2:string:ETH", + "chainId": "6c954fe6-91a1-446d-ab02-602693e5370e:string:1337" + }, + "recipient": { + "name": "b0ceacc0-4fff-43a6-abfb-2101d180ea88:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "bacacd3d0aa1e389d32a685efdfc3ef9d9a9785b60c105a2c85b2e48e2229782", + "proof": [], + "merkleRoot": "bacacd3d0aa1e389d32a685efdfc3ef9d9a9785b60c105a2c85b2e48e2229782" + } +} diff --git a/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_valid.json b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_valid.json new file mode 100644 index 0000000..c02250b --- /dev/null +++ b/e2e/fixtures/local/oa/oa_v2_dnstxt_tokenregistry_valid.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "type": "9ee643ee-7f4c-443f-8a1c-c9e070c6d772:string:EMBEDDED_RENDERER", + "name": "7437372f-42f2-44f9-a3a0-7638beee02ba:string:CHAFTA_COO", + "url": "88054edb-b480-43ed-9219-a5d0da0b6948:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "0e9cab70-bcc9-4c47-81bb-ae0e6843e7eb:string:My Test Issuer", + "tokenRegistry": "bc43f046-69ee-4881-ae37-ac21f9d767f1:string:0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "identityProof": { + "type": "86490b7c-db89-4969-8de9-d96f796612b3:string:DNS-TXT", + "location": "e135ffd9-74de-4efd-b548-890002affb2b:string:issuer.example" + } + } + ], + "network": { + "chain": "3d25a260-2df0-4fd3-b97d-8234c91fbcb9:string:ETH", + "chainId": "294817ee-e937-4dc3-ad60-79811e935ba3:string:1337" + }, + "recipient": { + "name": "4b9c952f-038f-4d16-bc0e-e05b795c615a:string:TrustVC E2E Test" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "6e16607321ece74005eec60b063b6a4668e696139ccfd48802561d01c93deef1", + "proof": [], + "merkleRoot": "6e16607321ece74005eec60b063b6a4668e696139ccfd48802561d01c93deef1" + } +} diff --git a/e2e/fixtures/local/w3c/tr_accept_return_to_issuer.json b/e2e/fixtures/local/w3c/tr_accept_return_to_issuer.json new file mode 100644 index 0000000..f99d02c --- /dev/null +++ b/e2e/fixtures/local/w3c/tr_accept_return_to_issuer.json @@ -0,0 +1,43 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://w3id.org/security/data-integrity/v2" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "blNumber": "232323", + "scac": "MAEU" + }, + "type": ["VerifiableCredential"], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "08c94837a51152b18287ec2304c1115c4611b530f8a18290de2fe4192b22df9b" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2025-08-28T03:31:39.440Z", + "id": "urn:uuid:019e8335-667c-7cc6-8633-3f56ce15ed63", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-01T12:42:55Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAnbvMfCuJT-Y2Hm2YTJ_AqlQPO2hjknc1Hh7gkxN7MtptShIVuWX7TAkTKIFPsywmoLoqK-K_E66q4VZ2e_jBmlgjgCQDi_mCpdxBQ_7N6uRAjvf-vuBgMbEwycehUWVM_nPor0xYICODl1NEMILZcbeyrBViJzWDpqx07b9CjHS-X_brwmAljlhA1a-RmJbUIrxTBoGUBiwxDiShGfY8MGybG0xJZEd7fo-EoIUhLaho32GfrrhASDERsDTRaOUDdtE0zXc8rjSlmFhATgTmZTbc6NVq3fJMV9QE3HIJdHGuUp3Cbtad5otxHGC41ZIVk4ufCbt4fnXXqgXv4v9PzoFDvwIs50tpDDKBSVhA5rPpfOr3xN_hIhc2X44-ZPNwDgLFcJII_92eNzhIhEYfqvTaTUt8KRFaV5juge7pd08oJ97bOYRohI54A0V2slhA-oYB3N8MdYlDW3SPdY9YWzVi1o4U8meHHdnMSiEUPbNVCEOupKoy6vDaq-EavbjPm23Ij4qBS0U9O9eQ6nRzQFhAyb6Lugc_7R86dU7aBE6hmoPEeU5E0V6LdRqxmuXeT2vgGsy3iZn6sohxgBmrUx931W3ykrJcMIra4XFpmJ0O-1hA7Dh_qM-nfLDUDxuMjvYQ109hpOXiJAfkonuUg0dF3avrZaS8rQfAx9r_FGJW1ZZ17ymrqky8WPikbU_B_89DM1hAiiJSvoocwPUMVvMdTH7nJapNsfqsIBr2N0f0ENVdnPTkz_IpcgQ5PzfjQQpPu_iOXlQEwGaPiZG6thFh3_7gslhASYThKvR12aI59TUgRzbLnqcTo61o6BBkgALevWTdJVnuzFCuIcl1HXjoC-3Rrc1AitT3GCf7nG2QaSbuF-3aW1hAkzYMpC-KuTm_vKUs1v_DOgy2L_z51Gvc6Aa8iD5N6pflbEDM8OmkYS5voXkXg6HwSH2hfw2huYdLt1tTBVhHOVhAJH0D8Ic3aFiL4NkB39l3R-8w9Sv0SByn-yl4O28GgS54_sjI1qpUFh7tQnJMqzgCop6illtoPrFwuLKYNsTZoVhAI-6ZpMR6oa2BUAN-ZFT7bI6ziwyB-uVjcBcnJZpVq2-0XXZrcd3faEXrd6owSEtOKODmAiYEsM6fcryKUHXcWFhAcMLgzs0SX1WZ1TrAER-3sr_2cZ4FSLBkHYtXN_-FlSt7RmraogU-3x1TrSVOarZjyOTVjM3HpeIPlZOQK1pfP1hAW3_xDpvG4y_vkoE_uvHpOxXtwgLL7hqU4KD77UGqBJ6NS47vJoBVoWPjejSjqfGFgP269dVCK0vmUNXiK4CyPVhA5EuT9JHjjvErid8cqGckJQdnNvl3cC22v21-JHXHgXInNvykPLyfCyGvFre2kWKDiay8pc7I_Q1L0vOpJbuCy4JnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/tr_nominate.json b/e2e/fixtures/local/w3c/tr_nominate.json new file mode 100644 index 0000000..d7f2ff9 --- /dev/null +++ b/e2e/fixtures/local/w3c/tr_nominate.json @@ -0,0 +1,43 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://w3id.org/security/data-integrity/v2" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "blNumber": "232323", + "scac": "MAEU" + }, + "type": ["VerifiableCredential"], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "c028b0a92ed3283146ef0e35d2f15845d38d7d4b736b14d938b0500d97a8426d" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2026-04-28T03:31:39.440Z", + "id": "urn:uuid:019e85d1-261c-7447-a1d8-eacc8ff49537", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-02T00:52:17Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAcKXOxmPlOAlFHPQAAVvC6XQdXQ8-NfDB_3v9eOTj2Iwa8-dpV-Ob9g63prwR5da2_p7vjNlggnRitc91Jkst4FgjgCQDMm7ancw-x36DsY8sJJH2IABjpoQ66tmASYIQLqaneMBYIA7ncsDzmAqEzImy8oWL9PJHEFhblEWc3h2-p00AUMqmjlhAiboqvLeE4cFKOUhCnvUiF0DBah9Jr03dUZPqgzQOZ6OfVP0AoKaCa_DnEdHike4WsSjyn68uY2I7y_JLUikjqFhAZIU0flA07IGKc97ZwTp8_aUrygP8hZf1rsuqEfJG_VPC2nll-uMmEThNhc26lr7IBlVWOZnidMZN9RYqj0FuG1hAV5k0Qngeov0wCJwFcJHOQj_KsKSk8JeIYONpy3MNHEi8AVYAXg69rqf8KplEXHIPvck1LI2dU-OyAwYK-q5JdFhA2IaAv90jDd7Qjj8P_4CDx2Rcpjvz9brJYD_-ke_kJI4Ew1mC2IAqF0be_Mr1V48ZvGLreafowX0IRlZ-JgkMPlhAMbyKPaU13SlMan6xnMTTduW-1D0wkrRNRSrRcdQ6o5FIkKPZsxuKhJNwBavzM2WemjTBMBhvuGSayf_hCs_0IVhA_-nOT322Nt7i_Ou7gkFJH1Zwm0lzO5OzU_zI2aP8CvbcJZob7_cfbQBEnOv3cG3Zn7MHZbJMYUuc2K-MeRNXN1hAZxbHWnDdG-BnAHTj98rU5TTHT6hJ8JHG-8eEcrqmgmyF9IA_qM1J9Ur2mihqfmCF0WZGfg4UslYj64EAzKAko1hAkJ-jZHjgt2jRQAgdBPVFt92sSL_NOF7nekRH_92dWcthNSqB9wtH59gvvZy_7kEmFuMYYa6ZnB1cte2Pn-D2o1hAQJD2z_q1zTK0bny1mDyvCN2AKx0L9brQR3NFxJoUqCJxa3hQUS6zUrXUkn-19-0CokRr1AV7uVUaSXIqVccc71hAQxyHZ4RHion3RMxaE48merz5bwI_R5UaxC9ufLmbFSTkS7-HWtdjQgLdOLkxOBTU0Pkx2t0-IxQ9NrRh4vt0u1hAs8KV9zlDeDYhawfo7JlmjbaRBhBNunmnUQ1EDEhK8soAkQUtGvyTUWCiQMyB_xq6qu4NVxwWB3w5PgW-PUWV-lhA2gITk0hUyc_-xV0pUaaGYxVYV9u_7YIbMXYuAgdhGp9mdyWE6pN3r3jIXZT8Gmh9EKfBDy2naqdYirEy9wfvYFhAAFl9HP4XEzxVpUS91rH9LYSQ5AI1ZNoWKQdy62sIOtOuHig3Th-yHmiLxuhUxAdyv-w8KhFrPtdafVxP6GpoB1hAy2VMWaMYYgdnnTFMjVIhgOj3G2VHTuFZs4Y9X917Rv_6qfSge8AQO4jk3nqyO8vNblSEKDUpJEHDqosESFrnk4JnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/tr_reject_return_to_issuer.json b/e2e/fixtures/local/w3c/tr_reject_return_to_issuer.json new file mode 100644 index 0000000..ebe8910 --- /dev/null +++ b/e2e/fixtures/local/w3c/tr_reject_return_to_issuer.json @@ -0,0 +1,43 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://w3id.org/security/data-integrity/v2" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "blNumber": "232323", + "scac": "MAEU" + }, + "type": ["VerifiableCredential"], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "8c67260e6f796368a680742e409d5fada0c58ac1abaa9baf38e9ebeacb7caf93" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2025-09-28T03:31:39.440Z", + "id": "urn:uuid:019e8337-6604-711f-871c-8bcdf26ad76a", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-01T12:45:06Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAhH-THDccLgk-kGFXiT0Gm1Il8dmIsxFfCfiRy8Bvx620_6ctv67s7MFmnIQmI_Uk5m-LbL7CL0s7WOuXKSGvwVgjgCQCLIVwK1SzwbtKTwRv2ZLYuVkkUloho4ZatK0tztq9gv1YIOSpzh4waucKxiIn7LplaJKz1Nlixap6s0MuCw22cE_djlhAZ7xgk5BKgIgdVucZFp-4xMgwx80SVZQy7X9PBGlJjKu1xl-orf0Y0XBfm4GAYQCdzN6ovQIVFbDXramyLOHF6VhAZmEbNsxKgsC2DyeeLIinnqXz1USDqHguBJO8yro3AjYl71DSuvIy0egw-L_kfQ1MiT6KIbfeFWyDab3GV96rGVhAqqHdHGshTOgcadiFl090Vlrio_O0owGs2Ioiqt4AjquR-EKQLFYH5VGy4ov17b7x3k8I_j-YUKnI1pGUsmYpJFhA0kFRKW7BX9xbhLM1WUKHGZF4_HIOAO1kZTla9KbU6RLsCTF-KkusDkcnYrJeY4JijgTJKY3yOPTRKRbWHiBlSVhAI-8WNwwkQeTIEAtZA0s8YC58jQ0Np3896xZACnH05rM7Oq1mveZaD8AserBFxrG0kszHZ7dIm63LQPz4K_34aFhAQbgz0QHdywlF-B-5w6zPTVE3L2dv124cfr28mrE5LGFiN-B9n9LFO84rpn8T2UjQooDiizw6S0Ms9Fa6EN2bPVhASUSRsVCqqvNKEN6LymmczOxUOUzfO5mBAJu4Cl-wOlCnbz9Tf8d1QNthBEIHDWeFM4GknbRNlcNxXenvdcuhJFhA3lG5z5PctIC91yROIg0yPDRMviU_rjlhXhxTOyD1LFkjaycgAdrAXYF8gX6U3zMyEBPg7d0Gw_HaxutPJnakzVhAklFIK5YAjInODbDSHeMOtniALvYlEPuHc8PKvhR1qKJkSuUUViPtszRQWP4fq62kQz7S09G2wiDUSoJAAFqdHlhADWJWwFeVayrt9TI2pX78xpY2WYR2o_xTHY2mcL9K-cjbV3tOBPtJJ30UajeowVHYtLYcI7xawwICkcz--G34JFhAu0ERWg0cRqaaDKsFI9t94-yMak0DiATn1ppq6DwSFNDjbBUN1jKk5-qqzaWv5NqoUtiLhUMXrt5HiKKOdQt3xFhAorDjUPv32qY0mSOjkAp5y3wMTgk9LGdAK-rfaUlExUNWSE_1EWAdVGxNA_7yLX1ihDh4xOT2OnJRXD0zjPGrplhAtfvdCjsM5Eye15prlXTV9C5LFJuhYL9qDl8Xz-ku-mOJndJ1iVDYgVsiWUQoGyPWT8ld9yhutljPeEaP9nlRz1hA5XZyq3G58ZvCTzuR69CecMrg0SgtRcrUZyloizu74fIlk4awAnR2gO5wkUJpDjl-U-b4yiOmOwMjZWgvzsw6kYJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/tr_transfer_beneficiary.json b/e2e/fixtures/local/w3c/tr_transfer_beneficiary.json new file mode 100644 index 0000000..ffe24f5 --- /dev/null +++ b/e2e/fixtures/local/w3c/tr_transfer_beneficiary.json @@ -0,0 +1,43 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://w3id.org/security/data-integrity/v2" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "blNumber": "232323", + "scac": "MAEU" + }, + "type": ["VerifiableCredential"], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "a358b0a7df13a1377a9ce8a082ccbe95c9fd700b8c0b764ca94375b44d8942a5" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2025-08-28T03:31:37.440Z", + "id": "urn:uuid:019e82c5-be0e-7ddf-97ef-fc5eb6b86146", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-01T10:40:57Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAHHwnW9eIcLN2olVwsrthFXQKZ0B5UmmX70CufoFcoSEmRzHbC0oIzd9TpjTbsKc9SGF8LMooNNukTeZjxbmmRFgjgCQDKoBgNo7ZqvH9ca1dx2XO17YKMeJgXYuFCgiUS4qgdc1YIEAgBYGuS80Vbl3ZLA_zA7KDex-LL4ql0VOWDCuXXKVUjlhAddJGvZlV9Bh2hkr-JEQIF7u2WbgU14qd5ME7S8GDikAyzv2io4Io8DtWJTp-ETips3RqgocOQ6OrpAMcqm0vLlhA5CqzFhCP286P9aUp_sXPFXrMzvGjH8IcSXyfojccpgzZ_2RzOCqGsnHRralPo1bKBW5uco23IsKlIBuIn_ctwVhAzYUrng9ZLUQgMpul9PJZQnCsVS_mOeeoqP45Id9X23u9uvCREsYZLplhfQpsQrRekgFqjtdYlbEWlxTshuCY-VhAUDrxfYM4GTVoMKKMkc466WtIiPKgHtKA2Tc9nrlVBFjTpItTKNsUit5Hu00o8WYG9e0htfJxE_6BDwyv88g1JFhA-0_lXYg9EKNjuNF2edk2M53qhr8VX4p4Y_6C4JF_DW_OhM7ftCBFnAt4arKpW3zdhU10dAfv7KwnSY4xLVt-p1hA1Li8MWa97i7PnmOFOx08nn8AFekZYHrjwAS5WdqVCB_SDUAfLp5ftRcemFjHqmwDo0juqjzHu8aAaEb1EpQLzFhAsxLRxBe1a7Aa3wMZBn-xwtBIAzB8YQHUzMj6YCK3_qbHpY32XcF_no3O3UDGiro9084s40NliNy_gHSKoKAuS1hAMq2lp_4_Q7r2LLuE8j3_x5agJgwhuh1L6Shc5kkGke0IH4IJkZASnUIhyWvQYg-afo-nlN8mHjXVu6L9frdC7lhAqxpafPayOoNRefFMIsayPgAG8_nt-n1Ftce7KdxM9NH_lBoDMb7DWX4XDDiDvK1BbT2VzTppZCS2Ktn4otGqhlhAMl3jNBL_6n3jX7kj_F3kWaMZ0bC5YoedQuL2ppePVNM2LtDNYovcLP9RFAUOy6-WoAfaaYIP0JiJorvd9B8aqFhAKi_bbfZdNcJiWw27p8YaWxKI00GnFTU7JALad2GfNOkTG9Iz19_9cWvX1YnVjj9-AMUQe5BT_RvcD6CE5x2FElhAiGP5nAqwXChj5X6ywPObkmkynbC14oMbIF_pI9x6DgwNOS3qfWRq1J6DuV3lno5vKMyQLHVEo1n45UtzPXMb0VhAAUzY6f60V_dWxS1VyLDzmFMxze0oUXLuMsgDLhsaeo9hajk8RkQwgbx_xMFxlup2-8i-x7h0b7Cu3IIrrNDrL1hAmvsohtOxQYxHk702hzc5ab9Dm9NXfEh-ai-bSRw_unTPowlQq9umcTRrQj9KajggnefjR23h4UDeoI0kYNibgoJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/tr_transfer_holder.json b/e2e/fixtures/local/w3c/tr_transfer_holder.json new file mode 100644 index 0000000..4b2e3e4 --- /dev/null +++ b/e2e/fixtures/local/w3c/tr_transfer_holder.json @@ -0,0 +1,43 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://w3id.org/security/data-integrity/v2" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "blNumber": "232323", + "scac": "MAEU" + }, + "type": ["VerifiableCredential"], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "31884d9f2926120a5779cad07bc5c83ee4ddcf99e88307c8bddf78509cfb2467" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2022-04-28T03:31:39.440Z", + "id": "urn:uuid:019e9559-79e7-7332-aeea-8a661a265109", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-05T01:15:29Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAbJBU78Z228przCwJVyut6f6aSfJcs1id3fksuyDmsmpRRcPwoQcr6GHvy8zel8xQW0uBK9e-FXtK_blEHIY3JFgjgCQCFK-FrPumD5dYNQ7dAxaEuExm_aVZClEqRszUFPxMlxNYIK7IR8a3ErSikRe7ECZCuMOraaQc4hGgM5-9-BJ4OnLzjlhAeM8LkRLPknB3RRoVm0NBKfW1Bf-YhxKrI6JvCVAV_cWT9kBWBPlCW8JEJl1D5dyRKMyJAHGA5_MTlEOJeWLGYVhAOF9hcpFdJwTVwYEnWVChcOnM-jNtox9AmVubDVnr2w1QW3lu4Zi04JVY59MOK3KxqbM9liEdAfGxqVCXyIxDv1hAWR3BcA58YBMv5u3M2qYiYsitam7X4GewnSqTqTx_UMJiTF58uLAKFiFpWLZCpTLZPWh9-ucPZ0RW__7sr1tOtlhAbxtAIKsH4K0OYRXb52sZuUFp4qz57aGpxPuyHD3O_mYNPxX837ohqvVsAxT1Ra_C1iGvE5wQ_-qn-TFjkFd8M1hAa7sb8ETWCX4wb-GjJD_tsapJx-7Cju8Q1K7j0axQTS_o2PLmKF1g9s9-_zcs0xw-4eTcc1SfgVueuj6_w2IQxVhAwcWawns62ok0D0QHw8q0_D5PbNGNI2J_4XxfQu9N4bCV1ALjZCZqrNxrp3Yjlo83aeAp1cy7iFGjdGDHE8q35FhAHTNrrOepfgqXiDNnAu2vjxPpdf4B2E51EHotVWMe-xSvUf9etm1FcT7UhwA2oKHUSkarJLja0Xp7_Jy8Hxz-KFhAAyX05QrrQ7Sksd3FTzOVdSO4fvxK-Fb6LqkcU_1XlfdGUuXdknEQ5PczV-hahi4ZundhwBmEFOe5136JNo4ctlhAq_U8zntQlRXIT8Xu5CbWOFYXA6F8VRYaboxRyRc2sMhlhCU6RqDQPVNBS5Ck0HMIxqiotWE7Meh1tCmkLXc11lhAtuH8kXiQD6vdx27-5yhKZBY5bDcAat5RlIaG6rrhCOzqfxwXEAHlYwyw0EMutNBlRjZG1MhQoqupjxA3tGACg1hAijyXKUtd0szxLEy1ZUtyJ-2MprqPgXUDam99k647G_RZbP_HBGgskECl7NOzWGByZ5K96fBeJ3sxA9tnRO18_1hAhdYPqxdG9FUok1LNTjm8ghO_P_6mUnZk99u5YWD1z1cUAodjzQ97elIYLTPUgy4Iar-a2KHdSZXbdK2MpJDh1FhAZQr9ztpTF9QW1JA-CTEcOz0MKddqvIFFiGO2vPmXKm0Q5FEaWR3pRRJWTLT7nY64wsd_2ZH572maCA6AbLSPllhA9FwWgEkt36ZEAAB6Y-2GXtg1lGrz6ae2xhmhw2p4SfFyw7WoWAv1eRcHYcROKmdHKIRQnkj_OUDiggaG7p4lxIJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/tr_transfer_owners.json b/e2e/fixtures/local/w3c/tr_transfer_owners.json new file mode 100644 index 0000000..fc206bf --- /dev/null +++ b/e2e/fixtures/local/w3c/tr_transfer_owners.json @@ -0,0 +1,43 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://w3id.org/security/data-integrity/v2" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "blNumber": "232323", + "scac": "MAEU" + }, + "type": ["VerifiableCredential"], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "e363ffeecb561c940f74e01c6a4a21154ad91cf71eaba09ec1ba44dc32c204de" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2025-08-28T03:31:37.440Z", + "id": "urn:uuid:019e830e-4c56-788e-be74-9ce036514e0f", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-01T12:00:12Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAqsRNUMNQ0458-Z7k9XQQub4b6DoyI4zRz0RLRd6Y7WtdwL7wLgsseGLaMOM-S67ACWzv3l9upTI9zC7cdXZbU1gjgCQC8ciPevUxl30tJwpSj5D5ehm964AHkK2Hye7NgL28dGNYIHWLZmoVxcDlMNj6tkzmfIy6C26Vu8Lim9TX60wCZGjOjlhAgkYwDhqJUj9YqGqKYQe-NF9v44Q_vnctgU2uEJTDeQs9iN0Zr_8VX4mXo-UQBiEE-M_i7TweDUMOcRLocCDzllhA6PaFrIZxjMC9pVH9G8ZU63hr3Y1FKeVZsXdhiwN6eDBVkaEIU5npttrB7S6WB8gAT4GawH8D7OH1yWnChj0T8lhASclrRhS-qdwqQilPDsByD4B7_IGyG3I_d137zOrgiL_waop0oLgDWbj5leHQVqKkynwAuCbtgngy1G1rRxB0tFhA6_rB1IubO3ewoAuB9XXYmZPAcj_eSzvw4EyU5L9YvHu6uBlzpWb7hn8vaYWxTLRoc-usd8ZqJNelYZZKCTsNSFhAttFih2oJ-UENzg37b1ePR3QVw0rVXLkknU1E5rZcgrB_isYKM0sqAvNhvS63ilxr6GXd-GUYN7vsOA4BjWslB1hAJoXuyzD9hXWjI9a7k5Y-t8Ug3ISHYuE5jUwFeOf8BOnjdAxeBfZFEj-iRD8TqcNeZtpOo0B565u2bJcGfs48aVhAYHvLm__ein1lWMbmqvwpoYhz3D5af5FJtDiWnKsTmKT6KTFv8FNhasrQ_iuNTzfog0wB2eJO3H4hqMEj0-4iMlhAdV98O2h9cOzZe9Eo1eBOqSjhdON_3C7-RpxFgS8g3BGR1Vq52PAHIm9SYkx2QXr-fExHt6X99QDGD9ffaLGCP1hAcNxp30qphaFN_sUrxDXi0Tf4clqCzW6CAfIAwuISe_tF3anPd8Pijo3Nnt9Bv-KLnyeNEFPsMoL0zIdIGKRN9lhAYV3IK41wIgi_Dz0K3F877pAtw3mN7ljBcZ56wfonQIjMSRN7JRncHBYSXfazNMKbidIQM94vM0IQnHboCMnZulhAWXjiX6SjYmhj_WvYaI06mY28EykC28stTea4k8L23qu9CA9-7mbIk1EDD1zkYhYPkw94r-HYJhL8ayQw-rv4DVhAWyGkT7GuXVuBTM-hlqhU5LncMHEjlxVYUc0bKaP_37j4xICVjk3gXD7NQCk4WH5sPAK3dJvO_yLvXlfYQNRVM1hAVExYIrNTMRR9tykZApeALEoPyc6h6L2cceyfFjmvVDxIX2lMW3qyw-TqeI6GjHCFWWsUMjF8iEhp4kJORMFTwFhA_sDvDUtMrVEE5MJR290K-lNbtJU9wr2qLrnpqkaz3EII_ClYi11TYTpV8RlGW10Nyl7UDAXBqjfbMI3sIbOPNoJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_no_contract.json b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_no_contract.json new file mode 100644 index 0000000..a065ad6 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_no_contract.json @@ -0,0 +1,57 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/transferable-records-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-TR-NOCONTRACT-01", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0x000000000000000000000000000000000000bEEF", + "tokenId": "d1a5a965ce26b7bf9e8399b23938641ee297805626e927d9ed313ea8c364f57c" + }, + "id": "urn:uuid:019ecabd-3477-7113-8704-cb0e3dc2087b", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T10:04:17Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhABx-a93Wq7XUCwaQe3BEI0dPC3KvSvN_R1hXg1KvCIR7IPr3NuSBnKDLdM63wCKtyUvQhFap5MlGEcPDDoDufilgjgCQC7N-B4tMbig-ugbTxN4r0WP0j5Tpjdi9MZKv8Fj7x9ohYIE-uVuICLXrWqeCRiFBEeB0jRZKs0hpQ8IWUZdxwZ-IGmBlYQC0rJHOpIXf-E6uv9FIcFzbrDKka8R8YfSmgyo8_FO6ogNeMIN7LoTRGttHwbrL2zW6WO9Sd-OMeGAU16S6FipVYQI2TF8ISU5SkePFqMmrPXYzVWrsup2qR2K23jQ6c_s4JW-Su-vRXT2SkW06gcwiyDGAaTb86jzI7FFM8on7LipdYQBDa5g6tjZcUzQ1rAaZnpxoJtTT4yZ16Ro0leqsU-opOQPQpBlxDSPwQBbJqSEybBq5cv7sQzUO3adWTTRbI79lYQG22mo8ph3qmIWLAIpWBckGeJVeKwLiGoBPPNCgy8TlEGY2hAr9v2UWZYScb6kVvzvNoC8RGGrjtscy3OJBdTSFYQCzYZpK1QA5JuxNqg_M93hoUKg1ZBlCbVfpqANidUn3ZIc_5QEEIklqhHmkEVq8-zo-JFCRq4BtuEElJuWYruIdYQPNuqShkl8NdbkRl2Nxi7SZk7XOKzc0I9l4nriy4rr6tkhdF_iuFTV2FpwpiO5oVey0plt0_WwioFYfzGe7lng5YQAyL9CUxnR_Sj8Pg0xzBW18UjD8m41j7htIYKhNCVKEIzci75kQU9uyiLf27DIG6Tau-erIiBPl-TxHhNVS0CjpYQDLPIL2J7QreRABrByYlBVkiqqzqZZtXX3vEot4cSiJx4kWT10FNa4FiuzkoEY88igr1qtxJUbnJ5Beheb41fJpYQDUJWaGKQ2mO2qqpPfqLPpxFxmX9jSogyRdu3eiw2CAlzeCZzXfHX5DqL8omJiVOZn1NJgJaeejcvsjmwSPF-Z5YQCB4YOOmpZ9Rim0vBZFUHqat0fj6KUrua7OpL0L11-zDzUMXXD3P0GiJ3wKY2XsHoVULMCG1rG18Pc8UxgPcLfBYQJKJISyHebRml7CcBQArUlML-fxaqJY8T0bWWtXBENobIKuPauAqVStlraayyyoomZafPsyFnXCyg-eaRJq0i9tYQMrIFbzO7VBUTUYeupM9FBBO-y5R3KGWWlocwsPiT0EHu8D-jGUpvNq-UdBx5NYXCzbl7dJWqIJv4I_ScarTanFYQOsdbzhR5I5vC9e8hPEVzHweqCLWlQltmpaetA7UL_IhIvWI8NhD9ZBKkGTpYZ8os-dxmIslPX8Dw7QWuIkRRfhYQK0MEN-nFsQeXfKSPGrkmAtD6aQ7QLoTUJCdRnYLiSRSlAISoqwjnuOn9x9BO0s332CClOlXs3ZoIPz2m_x1_JNYQKPvQgE5AAvvqLAnswyygi0XF8cjTEiVCVwU2Ik0KhBDZY50nvlwGTOJG7KI5UYIIduznfVDY2Vluj2kNqp7HwxYQNJ5scZFD9KNP3duknW8PXH081lXEhFh2TyjBLPZSuZBSPq9I7TCBmFx7TG4W8b7e8ipxDhesXKjJ5A669-UgPRYQF6yj5UbyNqu-d6KDJK3WvHcRtkm-r8Vw-NI5r6_NfwP8zbeLllpLh3ixNqK6qOmcr1iycARaoAadAWs8PYyb21YQAWVdU1ExDe4wf5K-bGl2wn5lS1jGaHcnDdC92vX086P8zhDNS0r8k1NjephXCmzYvc16TD7S4dMTcz7QY3E8QpYQLKR2PcuKTpWXVaGu9UoSlPeKkYGWNMKvbWvlw35kjHy-oYxEULcK8mqzgVcbdWhXKfiy-r3twhezrcrbeVmM7RYQBeuNCDI3HacNANMGWAWGTQz8tQa4O02LC9utHdP7s69gw2UKui5CXx4mLeGSuZJVODPaQjGE2E9VPXQ-87kci9YQC5D7MuXDbKqQA2aP9R3oqj99JuPSCeFx1rHmfiN1qZpn2VWhuNpCcEYPwY4V-e4pJqc9gL-Z-F5_zm_Pe03VFZYQG1ODiTh6wKBvbbuIWNlLJyD837v_VqU-LlQj5ta13oMuZg_vV5oetEZzvx9QqCrdQw_P1zCLRmPxB3PCVimT9ZYQGqz3sMbEYhngIwayBV1Hf6025oGzdHeq5mHqE0uiQ4jJ4cT4ldm4D9oEwjO9Yd_DVJbYLd_Ez-p7fdRfHNEOixYQEpNkB1NjBVQ1Ubv2coJSGdLShIaIwUH_ad2V1WFAa4gr8raqfvZELVAfh6n3wXYDDqqo6nxX-1jgnr4FgBBsSFYQFXFl3CQNQw_Y4grgh5yxV3ihvfnHfdq7kvNInZ9Ah2gcYokorxv1jaflq97ocidV4Oi50KU9oDgcN1i5aTc9mqCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_not_minted.json b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_not_minted.json new file mode 100644 index 0000000..ee64ef9 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_not_minted.json @@ -0,0 +1,57 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/transferable-records-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "9264ea0aca67b396981a3382ce7edb36c8cc02f12e10b6d2381082f020c404f1" + }, + "id": "urn:uuid:019ec925-37f7-7bbe-99aa-7202007402aa", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:40Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAxXwN7qz01MIFNbZ9vzNxDXIQakt_DLXnK9R_Oh5nEsA7EKrA73l43KEwIn2ink9pBbZ9IZ_Pit8e2SOl6pKjF1gjgCQDtoJ7wzzyUmEUdMtW9eKIz7nDqwMJ9sl2Uufwu67_z25YICFCcExg_omdzpn0OYb0ZDEK9gMhr6GfRLZYK_mSPwv1mBlYQB931K12vT6p364GDtZ8BtXL2hAUX9-X34bkjPfwIZ81dI3LNUv03t3sV76f3PpfE63BnZWS6TiCxCM65Yp0Oh1YQOjloTiDSfPtCpTTfe1Z7-6qg-7TFYNra8fu1JvmLtI0vHov2xTnxUEHpSKs5EcRZTgIFIEw4wFu0SP_W7S3Vg9YQIkNwougz13nKnksRyQzt1VBv47WUiKNk63J0_Ksm7hkeaQBBZstrtkOmM9gbZkEA3KwSuhzAZvxmLyPmJY2-qZYQM-HUQBnr-ajx_zwbIXvK_1Ur9AYkzJuIhp7_hymWbFGTsNnjGNYC5N3sy1rvH_flbt3QOEqUK_Ct1HP9EQDEj5YQG7zsmyEdFpDjJG2mAA_5ULzCt3VkXDNUGmGnVaCkpdE17pf3XPTjqGmIemXw_w0Mo-n5oTpovFL9fwEy150vLVYQKVatiJNBrbO_IHuwHLUTB0z7pBD_V8L5XN8hvRpwxZCrJ3AzJ0tJ3sB_ZolpPfNVX0bxpIZ7_u515OKbkQ44tpYQO1EPl6RO0WA4Bxm7C4xBUiRA4EDGhqzVmw72KwQnpNK2RTmi1smguz7CKaXtS4IRqpVjLStFaaPgUPcauI_JB9YQGfYgDl0i75VPlJs7bDxWlLmKoUWHBsdAgjfJenV4pQZDM2L-WwZECearoYBMw2Rh7BqiuxNge91oUUj-e61X9FYQEFH-gVcMilBwtNFgLD3YJK0aTo20FKGIW4tT9Iqn4mZ2paVNZURkZH1WBa4OCTL2du95IjA2jKoIZxWmSm1eFVYQFwxwcdRykDJAxhO_jnZ7fpAoaybmBJAWKb9a0gMhYLvuba9Pwin37B62zfB8ka2ysNu_MjMdl53JCcIyv33zvtYQKWAHg6aw-OUsRMepaDuW5ea0xp31VThfxNT5a5LKneCW5VZAuiNvv3yFJ-sH3iCJOqQlzc0qtE9VjVCjfEhXthYQHz6rx8P-0JUXi5gNPsrlMJcO7uwTkuacgLO9iSTZK23TZ8dXt4TtualXEEUNorigRXOOIyhTpmZacFbJDK5CO1YQA4fWt2c02aUfl5SGlxVfn9zy7bJjoCyrSJ31SSfhyES1VIWM_13QLd_mb6SiuI2I6Fk3HFkmUOgn0fq3LejFd9YQCIxqLN_YDNgvl-TLcaDm_1Y2H70y9slNgYrHJTml0ItNtwe-fCc4ZHblIIEi7MH0iYJObIjP_53TlnYZP1f_7pYQPDgXoh5IOd24Edqnv6nkqnlxdbgitlR5JhF-0rgmEnu7Q_2TJgiU-u-nCoLQXowd6E-Mr7L0bCz-L4U7MnG92dYQCga2NvCnY0eTmd-DQOR0NS5Vt5uJe9gXWgqQP0YC11kwOlxJqfuEUrZv2nfSwJNzI8NQbHPU-VaKIM3GaPNpjxYQJ4UmDeCDnJKzoEWNwb-n93ONwvs2O_owGpCcX57bX9xgOFPkhJspNlN4grEnaxNTyS27-kFqM5oBPZfo2fmjrFYQHt6dvnzf3wsGeJrTRoJMXhDmOqLfHPOmzqswAo6W8s7LenhHNwFbynxqAzA2CdvRAiHoqgqbAKJCKqM8BdWKlpYQORB5dzVX8sPZBUYNKjYalLAJ0mSiQxLKvLEJt6Ymx4J0k6RlmjC-hX_R_Hk4g3owZGpg6a7LFNXXknMPzwTiNVYQBlIg7Z-G1yZXxw9FRS5vPYI7j_C5-z4maS-Fzb-dhuSv3ddPjcc7pY1PLuIy0RxXGD0I6JLgPcuXoDv75Th68VYQBqgMzRllx-h5avPMWOfyQq-PSktJNrQhfHfhgd8h765zPSWtqX9ko2U2NBfUaKOL5lXJO9qEONA08cdqa5-FcNYQNA5kkv5FBbso8oXMp4hiBaPCRjw4tttxxdhcwVOfRne1DMldoumUkD_oVIcKQrOK6K70WgV8Wl-919w0FWyCgVYQKY4vB2n0jPRotD5gAwGy4kOA1g0zIGEiHc78CiFgrKGr5kVsXHinHFYVYKbdRiMK-IoVPVTIpv43B3EUFuiv7ZYQKoFlRY9aeM_DE0PVmPawNNmo3xXtqiq-35A6P9g45YSKiIHnAB76m_3lX8NW0rsRMr3QjHiByafR7zElfM_KrFYQKzbv4uc3MKWbQSi_78Zp1fouTBIZa464C2B4TqAOkiUP_rlAnd2Roz6axwR4hvxd2vnIVrOVNq6SERW9ZSWVv6CZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_valid.json b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_valid.json new file mode 100644 index 0000000..1ff91b9 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_tr_didweb_ecdsa_tokenregistry_valid.json @@ -0,0 +1,57 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/transferable-records-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-TR-VALID-01", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "844575edda1a78166f3af489dacf057f9abe3c7a21ebc4d0eb6f1460b4ebec6e" + }, + "id": "urn:uuid:019ecabd-3418-7113-8704-c15c14a7d860", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T10:04:17Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAknlaaRSq4uHY45sJE-a1hBrmyMlPUzyezhfbQmnVFHARLAw1NE1UBAkRmvakEiYNquMGGkBWnrLcboj5atDccVgjgCQDUB-dE2Ao0Go5FwkbmIerIFzU766ylMhSG9ChmMwCASVYIKzLSlWfijXkODQrcSNqB7Xkpfg7of7-QPpwwD_CpagvmBlYQIaD0Bm-3-0dPwjkhzYRgGmjhYjXW8rwyyE_cUGcVXaJpfLfMM5l0SqiD5MXtHwsR_zV-MY4uyF2CwZap0gK7gdYQAgkZXK7eSfH_oM6NEHG-bzGkQNfEmFKmKXAyDYGA476mTzUDsZW0nnOuYo6wIADYY134msnTLmo63M8WRutg1NYQH-4Dz-LW3uHpGes4fl9QzTuzsX4Im4uuDBfn2uiW0N_qPE08WB88wWeAu0NINKc1yoDQKJ9JS-OTgI-0hxZAy5YQOg3HArXhlcB0NJNcFYcW5405L1wsLJX73PeD7NvtSvTfXDWLeQbpq0zBaOeLq_yKE2YP_oLYXg9VJGCuCcfNTlYQNNcxM_XNTXvkInbpJ84R5o8EroCY-0-jEhoheduRoliM99m8CSSxfA66PmrsaDMlMlB_rvEpDTloUoI2dfpdZxYQFH-69Fx2JZa_3tMwulbAUORs01Wdsv-WUOfkTtP2jd3h2FJNOYLGJqFdUuu7iXbnh-WF5e3vBNn5aInOq1QHzNYQA81_nX9fhHVG--DVkOTt9Sz4680hcpux8JIk3aNcBvDrF_E0TLvhODGjndq2dbwzZ5gMt8_E0E5mhAmQnqTHtdYQPDx_pbrRAgDFTpxrR0_yQLALAYT3Luria3ObAAZWBqlL-3qcah9IrW_xmv71wGHgDHgVyovTm_VNbI9NgxpbwtYQN7y597Biu3GE7zkY9kmczkSv1ADEzdewIRmowwoOo9ssaVndqFpKfTWTXqU_tfrAjt3VRmcl3hKyaUqruAey4BYQGFXnP3JSOj-spPptX9E1T2kGJYvYncO2NTo-H-3k1-IaD78-wX98CJk-MAtq4hzLf3Mq9qVloIyqjq2jWFmTEVYQBBiBpvqRtlbZAzvBU0naJI4M6ghwSOLFGBSNxYowEKk-C9vRkShKwefGUPBMG-QulkrMWW7YYAQpFsFrl7t2AVYQHox9Of7b9xGETyLtMaZA_8v_NGcLoqdhkkmGmPadFmWeYwBm3As7ivOGB410qmOumbgBjaE63NIkjcE5S80inJYQPdtPBGVGg2A4f7I3jn6qaxGrGbTidF7dcmkoOSz9Yievqwqdf1A5X_-xMkKaJ7mam15Qo-VsDY0EVeHiSUBw2VYQEERuUR6W86ndI0AerOaqU0Lr9brY-yH4nsSHMGZ5giK9W8Dk6nJC47C-gKu3kq27LzJlKcUdDGED1j00QRDohRYQCGVLuv6ly27sbQDoul1AuiWgFy54-aCjfmcsd_jj5B19MFX40RzqfdYxvH_2b5xbo42pgRC4fI1W66KfedSsBBYQEvB2-2NOgTkGLvfJ4bXE2JmpGqDHEwNl6w-FxxWAh_qQ8xtAgAqJvoMYp1rtb23-OBya7zNP-8dwEDoz1ba5cxYQMUJdpKxfQUe7BCjWMGJtAH5bBvyGDE6reB0hISf2ec1s0vpgEcXZzmzax4S1FFmsWDYmWVVQi7PbgIc75LMoUpYQBr2BDs6zUO2M8d1RSoUCmS9gYyK6af2QBjT7VkI8ArdKY98rse_eO-_FWdio6CkLYqdhZ9L9bQhwzT4oZywfvdYQLE2HCyic4hIBonjq_RQGHbTod4awMzoGhCmbPdkRRKPPiyj1nTsxgs_TfeIpnU1xis-Jdm_CbFQ3UFI9oZQdaJYQPa0sj7T1sYka1FsKbfQVohHH6gKZRadI8bKw2oAuAgTB5rG1hGuVAvTLK6NMXns31JjnpRn98FqSy5F4pPximJYQK45k2Zf9T3UNUOS6NwjNyWLdsfW0-8S5ax8T7jrvlomFV2AxlWPohTdht3v5tiiLNMj1bTqILJi41CN_AFfOwJYQN5L6cIzpBz2-XdybA7IoCPIij0cfE_HWLEJu2w12v0cELr5kM6_O2DYnmAEvpcqu9eC8mdignPnonvokh78XmNYQMaESBK2Iq7wh3yglLTBFPVLiSmM0bqgFG4Ds9i2gQu3viWqM5jJvr7ZnseSHUydTy65Z4v-H7LTgAWqCAGPOppYQMMkljF_w-4Ga5xNDNbaqNKHMz34U0bi4tc0uwFb3v4P4n3zWKN702J7Kk5QmJfIjcw4s0m0Iv6oB8JPh9b3nLlYQDGqWMQHs8-nZ-cR-3aunX6iso5ejnp6Fx1_DuHhzOXe469o5rIKyw7wHNUhRH91qZ8H6RsiQ5_3_CPVbQwS5GSCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_tampered.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_tampered.json new file mode 100644 index 0000000..bb919d7 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_tampered.json @@ -0,0 +1,46 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "TAMPERED", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-363c-7bbe-99aa-5f087f3e9790", + "proof": { + "type": "DataIntegrityProof", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-2", + "cryptosuite": "bbs-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0ChVhQtpC2H2B33FtDoXAEOPNe2jBkAYy9gLe4FgVyZnuRJzr_yBfL1hOcX7qX3vItxen1AW0_XgVkYVmf9Fp1kt5zv5s4k0MDuG85gEOR-vIO0GNYQD9WZttHrlLy5Yt4KX5JlbD4AqxyPhcyoKk-Wo6FkAtpvG0PVkeQLSPoLyHp_5W6GLM39_z1BQCoBdI3CHl11uZYYLDx2EM7LXGzSqyTOC8ZKJ9hgD0GHrf59LhRlLV3-pK34L5ohGo8I-g81SD6xVKofBMNiXxFLrp7w56sQlEOkcpISekB2jtn0DeTWzNHrnVwuejhZPM1PPtOuxtkbzj6J1gghmo5bxPXuaKOecbkB__8nY5PqMY6x-O8Ly2on2ZG9pyCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_valid.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_valid.json new file mode 100644 index 0000000..0f44561 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_bbs2023_valid.json @@ -0,0 +1,46 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-352d-7bbe-99aa-4d27cf2374a6", + "proof": { + "type": "DataIntegrityProof", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-2", + "cryptosuite": "bbs-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0ChVhQqHc0X_lBRjI08lotYfKYQ84MMIL_VYKgfu1vVVxqeWPshNoRkXt0wDigzOBMdjj4S4vpBA9lrcmgctjyG7XK6nj73S4KwCmH5pK1rpcFeeRYQD9WZttHrlLy5Yt4KX5JlbD4AqxyPhcyoKk-Wo6FkAtpONvr1dPZcd0wrXA8fHYREjLzrWNufp4XS1uuABjuyRBYYLDx2EM7LXGzSqyTOC8ZKJ9hgD0GHrf59LhRlLV3-pK34L5ohGo8I-g81SD6xVKofBMNiXxFLrp7w56sQlEOkcpISekB2jtn0DeTWzNHrnVwuejhZPM1PPtOuxtkbzj6J1gggOV7PxDhxa4n4lO1CYYwmza3J7mbzpC2yjJ4xvaus-OCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_not_revoked.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_not_revoked.json new file mode 100644 index 0000000..00d73c9 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_not_revoked.json @@ -0,0 +1,54 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "id": "https://trustvc.github.io/did/credentials/statuslist/2#1", + "type": "BitstringStatusListEntry", + "statusPurpose": "revocation", + "statusListIndex": "1", + "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/2" + }, + "id": "urn:uuid:019ecabd-322d-7113-8704-b892a0577818", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T10:04:17Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhATkhG9VjdOkUloWeAVJgLdvMI0IvXW2OsOzWIMn5Qw0wm_NSVjJiFyNEa2DCwr-MfTfrnkPi53Vo0tnvnVReeJ1gjgCQC6qc-qP1LAJO4Xe3hwETRGE21k2qeGKSiIJXjj4y6JAZYIJeUWPQqhzU9709KnL-5vwiFbTjWA7w9EOc76Dc8Oz16l1hAqiK8gxT8GJKF0bk2cXQQijC2kf_4kxlC_t1MLgRFuZx_RexQkQxMdEYgx1fobXl1gg4qhSxlVMbORHEjdJaf5lhARCk6Km4T-RM0a64lYOu50_yfz6hyM8nJVnNi5EbWTUEgjUgoYkwhcXH0Sf1EDIMZyHiLBsAALmRJuww2D_YTHFhAKLZwb1OsSUQ_aH_2UB_Foa1cXGhUjQQqRe9_kJAyZ6Hr_YK_5x0KBjGMTvG2aD1a7Qvv4j9JpkKiCYHnDA_OklhA7e1a5sY9oJJZgGFzdcPbdR7z0mXp3XflFcImuASQNhNcGclt0Yw5naf-l4k77AYhI7YCcWMB3z2PtULYT2NyqlhA2-NtSjnsShBl1ETF6oHC7tb-bSlJR81V3Jpr_R-TJZFfroknFO9FdF0RXrwVQM1-YDOrrq5K2yXHRX8FDShBG1hASuE3aJqD53ZZKrwGiFBJGZSkUKzIcmJtBQGxwfpCWbSyZZi_I7sZedISzMVY5dpLnp1tVdv4mzykzsJwKGGWBVhAomunVcXYl3GQTgy7HonCB5H4xxeH5tm9GXnFTOTT6PG0Di66gXX5FmWes9SMgqwiT9Jt33qA22SbPFnqp1lKiVhARdGwZxMxdG_TMxkaLFkzf_N-T1pHBVeV5vmW4ZcBsNmvumTn6I8vT5OLJkWca7VKGMD_RzLtyYmQ0ceH36aqsFhApmPIzodB-zPVMW4TM4QSrW-X01AVFxUGx1vKkwFYlCIbYf3qM1gORwsG4mDFo7857qgVGpsio9KiDvZ4wRV-blhA9qbMS7e5Ovm_kqqIkdvCuRoFVW8X5SYLdLyogsKg53U1aW8BpWYS4_C3-o1k-f7IAakkSfgXTGnA5qnNFcQyrFhAjQb3rr1Sq9RhPT1GF6O0TCJmAu7LNmDXCU0mmWgF6YEcS-7uKI_eOxBnAlk3JHhdnFv_SU_76F4FuPQoFbBsxFhAx3jNx5oRD7JlLZvWCUOGIUT-oun6fjx-ypwFBjRhHAPSQc4M77p8TrfOU2Sv4AUAi89Bj5xiSqKOSR2bQX8ieFhASOP4oWC5U5xPwsWqOOweolEVI09a-DrbnzTqDHcTcyhP4dzzkV7A1LCxE6ShAwU4i6uMCxsuuiOny6iGLXIv4FhAW5mjMcvBACO-UA3j-yxXUinY7fsqv48TA8xb5X6Nz06G8MxInpCXnqjYWL4dolbuyekAL0RXQpEesk7oeAL7mVhATx0nNonwEV2tMc4u0wrGOlSJGoFT1RXXrlnKLR4RsxASp92A2mN3HhhUkjD9h_4J2Ilgk0_zzkFga7Fu5ZoA61hA-p9MNTUCniU2M4zdZ2vgXx_d6BHvGw-5X5OVreW8Fd1GHMsjlC2dxc-NoSVL7tPkD_tKaFBuMAUlgCP0GYndyFhAh0wTAPoXwK8rKoLsID4Z0rH0XcWVk-bqmuxb8IryfHGgp9lDHwSdxJeO7IkR4NXbnD3x2pLSj9l3oaGd6-E6l1hAJ22rblaExIFaPV7DVz-R83k3hYblWqaS4d1tEB_GyLAygsMM1eb9MjJtVartPnrDM9o8HlWo2x6mPEKmN4UPOFhAQJfZPev4b3LWNca3zTtpi9dwt799_TgeIVQMqvC29DFJvZl8d4h6FH42_pTxeBmo4RvxAztjUHQTEAJHYV7v31hAj8gYaydMdkfvkK8z6cL4kZYoqm_tzK7ga9bskL7_gXz7OJYhHiDAZrb5njhnaOEehM73r4jrAHGgvRV6qM7pUFhAW7ikDMXluz2cdBrdTHFZCIfHqh-dSCXQPcO2nhQjIv57GEPiRysBaqjE-5nhfG-GXx22vNa1wMJST_J9_KJwzFhAIAUQv4bOJWvMf_twrm7t8tw26JOJhUu41pW-GqgvKHUha1-PfjET539SUQM-wkrrt5Z3SvBTnVDqoK-snxr8YlhAmBXoSJDZid-4GT5PA5Rc1CvL95OoFu_XjLOv34pK5VqYb2d-HRaDtx5m4fl2MyNX6qurHZhnJrdWQ4GG3r0BEIJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_revoked.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_revoked.json new file mode 100644 index 0000000..fc743e9 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_bitstring_revoked.json @@ -0,0 +1,54 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "credentialStatus": { + "id": "https://trustvc.github.io/did/credentials/statuslist/2#5", + "type": "BitstringStatusListEntry", + "statusPurpose": "revocation", + "statusListIndex": "5", + "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/2" + }, + "id": "urn:uuid:019ec925-37d9-7bbe-99aa-6ffee60257a5", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:40Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAl5fxgsRhcsaEf-3ISFvgmfRj2mqlVMa2Yb0APG_LVtbrTgd_QiGs9ButJOw6JlkwiX36JXomNwA0tV7xAbaQ6FgjgCQCXSkhAXJpKqg-5lw-sbwpKcdp2OSLe58VsmjYEuN5EIJYIFsErFFD28TXCz8JZ4c9dIYKPEAqlQ4XQ4mDhKZk-s5Wl1hAOUAxRTW2KqxdOLor5zaxs2Hd63trz5t8fg7TY90JX3ZlIBd0OBkfTmzUidEG_7bBGmEP3c3SSJBJt2rriEedx1hA0qLJdOge4ESWSbSWhpn2GQwuKK7l5-WrHqmTHK4I7hDTqsNCczoBFXB5_GOTfrYNMc5lZ5HtHsgI9uF0hZuSblhAPJCC7PiqZRhoOmY3vLXkrPZJQMbcsSCHk_WgcSIao5JUojVRzXONSlQYxkYlgsmhiHB-TXPNnxEHLHrrsKE_z1hAJcwTmnlowaavIyyqDCd2q9s8Otk9vpZ8zTkb43pLdPSlkK2pw7DfBEw8v0qrMlJqDW_kvKS6BEJqcsxM9ZpcGFhADWOL65nG8Va3_wpzxoHiroyS5u50Fe3Ks46eMdFM8a1PZowBOqWSt6X4T12ct6vOBd4IU2zF3EpISeyXgWfMsVhAylGbLrBL30IE3icsk-9dewavrrlycdPDwdx7HQdaTuCgCHDroy53x9sjZ0kof3TQlsLDpqSYQo4zzKfW4fFhKVhA210BCCm-Hs_0GUydAmvRgXYSK1_tAseh5KOdRR4KthnLxgrUv26gt1CWj68uvMZ3YLzog681og63t_RNT_lGlVhAIxOCd8hrgydoqzyh3K1DDN6U7oBIr-I2zRZP2nDwWYj5vdDzqpNO7b5rOXTNOsFd4cEL_Cm003wUSiWK97Rdo1hAzApD18f3TGmzsC2n8HXupbeTxis6VPE54MT9yoxhbDIHt67Cna7AAoA_MkcJFUFn7l1PlHIPxS8pfAgZVXeoelhAcz5erBqMU20WWMZ6yaJ-TCjPkk-1ze5fPmsxV1nQaQt5Zus2bcALGvPhb91c1DoGUqAcgTk2Ex6hNfno_BuM1lhAiBEVNEfczQ0J91lBAz4NELyCc8kOK4d2lr7ycv1Pyj2bXemm5EeRRKV1tBg4QTonNyDhe6cXtjji2Ugeyzt1b1hAsaE58IAbEqHUa_pPNDyuOXiB270Q-SUEHHM6AKe9DlZLH95iuPzIabtzEdLutgSHdE2TWC5gSa1dDp4dUSz56FhAWepNPE0FXJp7tOEnRL67mL8TCkEkYEzZJi5_-NnGiED6Wm-vI969K4FxRrpckz56pvAwKsQBC9XZdo37hHmmbVhA-E8JR3rFHCfyEColgO0IdCruHtLjWAIpE-jc3Dkzh6RjYD2Ix8-oDI_Jn2I9SDzb5EEdbWTjorY7DmOu3GzL2VhAbNr13oYz57fQMjehS14aLDdGrsF85nKRoDn28bFgUTzbRRTK7xKQX20Dw1SL1WbFjzUcuwrjAZw6dLdX4CZIvlhAM5xoeAqo3ni67ZY4jVnaiOnniYLU9VOFVkFQrSo361wWXZAvg8DD8KYQkdsKmiLom4wJkfoc9h8wMLL4biZNSFhANMU5m_aVFbMXDgU1h1G-kzWbCUYFz0qfoaWktEq60OLIjn-d202vxbHdnYSK3THUUkd-5ZGv2vo4fOO4SN8kc1hAvcKm90KOQ1Z_7TNsruaSQGW3UHjLfdP7kdApXo5nEvKg6iBHvjFGryAvw8Cn_TEkHyvxaaUvVjV_DWI7ZLauKVhA_cU78kbjH5giF46SHARNMQCeVSKVwUPxVHMqf9DzL30ZQgSVJEupxHwdE10gYmT5hXQwh5Xmuqt_l5XRO_EUw1hAz-NtG1ahVrJ5Y0YWNIUIef56fIPypRczifHmtL025BoQgfWl0j4UiHcL1bWk_N06tmMt-1qdqz7YaXUt-84bv1hAoCvS6dTtLKo78ScARvEW1GuNtGuoLm-lP40Kr-TtNOEOqbPGptKY7ONVCPBi0yW1ogz-oWdydW5R8zuZO9IG2FhA9bHf7N9VRx__X50VDYF2s3JGIn4GOM-5AYh1QbRKkb4EwN8a69LYD5HKi1WElrNSx_YuqQJ_JaAr41BKTPl8jVhAt-D1D_uLHqerJNaJRQxvnoTYT_bu9LuQ7392bORNW59lnB-ALQZI7b-s3W1TTQ4kk7zbn0dyPPb-zW7ID3fJcIJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_identity_invalid.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_identity_invalid.json new file mode 100644 index 0000000..80abe50 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_identity_invalid.json @@ -0,0 +1,47 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:999", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-37b0-7bbe-99aa-66433b952967", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:40Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAp1qZ2XGSATZEn2jVVGC0SxNRC8z8ZF38NLYszZT5fRm9LYoOnLA9z-bz2axV0g_hnBkHEKRGk2mSyMQrM5rroFgjgCQCWh3nh3AzL9yRUn3dO2i1ojBnryLiAaFA4CLJHMEWvkBYIKf91xwfo-m1jGeBuBkPwx4Jb73Mz77vp5xW2J9jaw2EklhAoYEuVljecRp2d4SQ-J38JDJf9Ar-CmIKijDPIqEGovdhmfKp1-d-_Si-g9nn7PR4-Ah_N1ojnu3ESmYkKrAKXFhAeJ8yQKhR4rDMuJB4p3o2WIGHyQwOcsbCXK7DjI_HEHG6AJX7nstw-NQjBKx9FoSTBt6avTm3JpTg8pb99F5Bs1hAmVMuh4V8JhaARiPKk3RdWB9r5ZXjT-iel-1tL7MT73bLbHffxL9MPZTOfCTFE52thGxYJHR06PplJan2YNJaslhA7ArjBvoxGZCP7YuCCDVyZL-9c2z6dMI1DOR61JaTYrOxrmOz45S4mrCBqZcO8BWYPmYpVBGt2C0_rR1ccb0kx1hAgqZdHEpPOgLj4YLk5edWgGVnI08vpGt1gNPqoOKxSuxgDyIp3pkvTX3oHyBJcSetdY_fs4RT3eb2gYCU-QjxZ1hAURtFqiw1_9xE8dmJQzEeCwlwlYg3sl5tYokn7lQPvdlqPWMxwoUdTzkmIeRTfYSabt9z5QoBhF_UC6RDNDMXtlhAzpueN7aHstsDFDL9FqwUlV2sCkREYxXtMo8GzuvLZaeKPB47Bnad5zKTod_EPYkn9O_00bDUvvjtKXN_uWJvW1hAV-4HaYh7UwSpmyDLN771vXm8AIFiE_c5oMPKNKDxKd3S4eqNYMNsux5chvuees_nwWvsJajwHNSLAxzx_GU8IVhAE_wMv9jU_NYEzH47juq2htfO_CD71Ooeq9jSm7wtSCkhYszlJN1Ijm4IEmeHjp-iWzuLfhCRXY6Sy_WULQK8_1hAwQ7e07zXDMS_RNu_lj6fkGrIfBSZZME85YeRM9g5zgyxY-LaCMO-An7tTFyqc0Js0M7XM1YT-IknJAWmZN5Bn1hAIHSsMJoHB-ST3PmD2M1xnXSbXYPHzkGEnDncODruPfi9Xhnz4js28oN9D2SyqZnbU2r122cU71-b1oh8sW63-lhAqJy07b_ktxQ3CnbmEUe-y6XzVN1d5Gz7qV7JCCaDNF3TYiqSLlcCdAIXJ-HM96UXHPdUrXg0Wt7igMsDXhfK-1hASoE4wMiw_4Ib3yCjRA6uY4zT43MZVb1ELPBZvD8m-9m5els49jQlUeaRH5B0yP2Ysinw7W_Ps_rw1scOQcaxXVhAfuweZBry2Im0gG-9esZ0vUjCWDCNmgZRpi_NX3O88bDRmaWmdhBd3kSxz03P4pjfIm6RzV9pWhN0QUt4M86hFFhAXvRbKGi2AemaRC8zX8bUAJLT3gYD5GeKohfB2KSzGBSXOfCEN-JbdJrQ609G1VTgOv2y84aocbot79swa7JMvlhAFYMOpuWYCWygfOeMhbxzElLjIMAfbgJgOnL6QF9ts8dE8htUZzanG_Ud4RwjD65c8wJluKyyvY4_lGF7Qtxey1hAWN7LFfihTeokXt44vdKfQWWXczobDO6_i7lOtkzPr4V4u0CFLPDVj8nEwrtbhq8h9fUQs7X2GBODO2g3eFtlvFhAEAQ8eZvJqUvlvVFsh_V_FB1L2qoJ10axb0YrJ_M2v9W7uD3_C19cA11XHkeVfi0Z04d5phpQEWvbkfQ_dc4BeoJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_tampered.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_tampered.json new file mode 100644 index 0000000..a650c59 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_tampered.json @@ -0,0 +1,47 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "TAMPERED", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-3627-7bbe-99aa-54e0a129bbc0", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:39Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAHI77GNPn49hj5XRgbafjB2ZPlz4Mih-Tm9RdITXLjoeAPcCPp9g3S1SMFIBMYnaH6f-Yn-eheYf2zF2rvTOYW1gjgCQChlC_hXMJh9iyjURRTA8Xp7B2S_P-6Py9HgOBhKWbVu9YIMUW1ya2kuhfl6ygBMBfN7Nr7d_pectfOZzmUQRbzq2NklhAPkgi8IsZTo4vcI3Fi8bOpkvNFJofiprsQFLmv3m3ZCzlQLMt7E5h4TXICKB-XjJ0zhn_2wB_9Iq7El1RDFnMXlhAV_6jTTZQfBgAs3PLB8BLfPlqyi0Ey76Q5X7kVLvsipmC_JKDolfkWZA65jr9obHZ_Q3HZ-jU50SudMGloaz_QVhApNBNdJplqBzODpIdcZjj9v4DbztPt8T2w5q8Zl-umwBcPVmiGc1UqrwJeEzW-1hBfHrdSKEXSNxqJupKvgRFflhA0Bmvu1h_17pb_ecX5MC3tTj5VPY13wPAXm9r_J49R10wgHF2DW13gEivjLk7RGG2a2v_KL6whoxeypsH6Kkh7FhA-rqrjL2EqAUBzTr4X_Gfe5f-gE07G9FybsZPNYD5D28ioxBfDaHPjAW50QJuaIm23zArJ7z_F8UzDYt7Dj9B_FhAfU4tQzlv1Ie0chH38sA6NTPp9VhX0IWqHEClQprKU3WFXYcP-uq4Lm1Bbv5eE8ujxAWJ7P3hxPp_L2J84Ddv2VhAMx8iptZzJH5wKSR3Sp2XsqCq9vWBY_SDKj6TAtazhn3Q8yED8GX4rdvclVnMfI5bgKqYOEkYmZYuKbgPCFhwBVhA1i4tPlrFU4kaokaXoMN5rXwc3gNXhACHN9Qewwx4EHv8ITXivHE5paVl5322XnTg7pvevH3ttpHHC5wCvQbxaVhAdrE_d9N5JGNekRA_tV70MxywklHtDp9Q9iHFNSRljgVkAkqepdwGseokO3byUtcifF47VMfJZXFU3ebkBf09wlhALmEu83w8MkgUiuhMKai5pEDxiqGIsIdNydq8p06Y30sMW83GrHnCuXa3x49jfhJkKgEI8NtJnlmMeqJrlDYGP1hAao6IWUY0gdRfLZU9MNxu53mqfJu6s_RNBzhKZsUq9rAc1T_pcxou0iu-8wGBvPP8cAHkrXgD-updseBhQoscCFhA88omjuarGHlnW3CoPzY-HILsHOKPYXaGJOKRg-cLRnJ2eUmEBqjqd644ZMnhjEQsVFWspz1qB8f2CxYtZS3pclhAKunCAcg9B1SsKss4FsadWM9MmH4_O6MxGgNj0qnD980Wd0p5GXqyLvLZDZost0SVOheATNGuyF8VjQn7vRXnslhAMBwx94HZvVJ5lto6dxrRcXspTRFNktM4l-57B3S4lmWXgJkxZm3ILIzOnU8tuDAd385siohg5G3O209qGsTa0lhAjJ9pcbTyRQePg-40h_iE5cMcSwH6c2C7PvXD6nnREsCkJQqwsfklSM14bczoCHEcbbgEGtCCHWGYwFwI_0pdjlhAfUmuFoq1QlBPMWRSZZcYqU53Dw0A6hR-y0eLckJuEzVEjdSTak8m0U42R6UyHtKdBpGouyj2uPl8-mnecPTmpVhAd1U5ZAfbnW_Y8dByxpyLQIX_iqhQsH_CHIvYf2nKCptzXHYfxs3fCNavjxGFToZNHHtDmuekIa0htsGNfyRQXlhAw_sdQXMQfN7mBuCnDe4b4Tb7EXGx8UHW1geF6P3bdKqCa6543Wto8qWTptPLaXyAj1aPK-iK8xZ_QhSS_d3UyYJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_valid.json b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_valid.json new file mode 100644 index 0000000..2853dd8 --- /dev/null +++ b/e2e/fixtures/local/w3c/w3c_vc_didweb_ecdsa_valid.json @@ -0,0 +1,47 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "Coo" + ], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterCityName": "Navi Mumbai", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerName": "XYZ Foods Ltd.", + "importerCityName": "London", + "importerCountryCode": "GB", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": [ + "VerifiableCredential" + ], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ec925-3507-7bbe-99aa-439d21ae1343", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-15T02:38:39Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAHWDsdnb236oM8pT387AnPENenHGUp1GVujNhae04A7854kGQWt1X92mnfglzCsuWIwIdPwiXJN01j3vnCM_rnlgjgCQCHWUz-N9uoiG0dn4lvMZkTmU7E8BIFsH8QZ0wLNMNeOZYIPNcPH19C-QzKE73Gu_B4R3Bt3M32dJOk1FXmFQcIiD-klhA8z-iPcV-ERrOqBgw5kh0aH0rKmKp7LSKsMFc6NrCZEB7S2hc6rlEcM0rzy8o3HvUVC7ypDi2ZcGZyR2V82xp8lhAHwDIxbOwBI5ZW4IhoPP7-R9fvrVTdtcKysYqaLtfqDoeWd0U4S5GlBbGJduPBXBcRe_qGWrkNfZYiBBFTgPNpVhAi3BSNtGkTC7hruq9RtdjgOuR46c88sZvpF-DQowXcVJudpEW7O3HokwrO8XfAIiV0vUSeButzPqx_A2fTcdoIVhAroWtBGgPS3353lQ6IRGU6XZuIftM9es279OL3PwH5hTqKlz0VS4eUci-J_079EE75IK1VWum7RfFB0IQ0b_rHVhACTa6QsbAM3Fb2kdBx0v10XsnO0t24YOxURVVZCazujyhHzQZUFLt18oq4Y8MlVsog7cSmTmtG4vVqi5T8ox-yFhArbvgjxzfP20-zW5wWqeO6f_ZfzyboHs01Y3S2vN9reTPOkSmOnLHqg7NIEHHiuFTcTnoyaFCoHiNyY_Sb_4oeVhA-C-VxmXNwgAsNBIyYYUbPgiUwKWqARbFcMm4hKfuM8-7S9Qz3Z2FfpEjTVnGel1ICKqV23ucrEo3Ppg4ifRijVhAs_kiXv1bpCrTz74UkLGnnINNYGKaL30T5X7Ik50vxCt1r2tUWb_LOW_giImCIOZX8FL5RiAhyosu_vw9KYy6M1hAgRcJ17jbrHywnJguuK8fL5QW2IeCWQYaQQyMcKYcJUGMbNkhvTXvdPvx7gFB78pLNFlEQOYOTbJ__DPUtDQf0VhAi3w8rmOd_2XRrUEQp4CIoiOHsdF0oTSZWJqk43MAfw7P_392BQx1GQ-SB5Z0Ndd-fUZVloDoifDR5S94MRRl31hAUhpz-cSDiLQdxtZDMOzAerGu-OPHbAhgBXE_UreKOzz-xnZe5OBBb3mKhqO56qBPi5f-cILBp6z2S5mp65tXTlhASQzJmZZZArOhGRG6fwA3pg4aaL80Rf6INJidPEO_FwH2B2fPpSJfUeheBM3pCUFj0X6xOpi5sY2eNWogp_IxIlhA9K5Z86kVu2edPS-rN6XOUBnFHaVfn6e1t71GW1TUSWdeldzQJmwEHVrmLt6WOeIjs_A2ESPE-RLrEZ05D_Jtv1hAySjrGG-jZIzjx1NFZSf1O2pbZVg5sTGMqfCnWinI-XV02aNjBscw4aJVQt25ag0YJBCCHrqB5hlDV_ObiVYcK1hAUdN81I6HO_XuQgbl3ZrxctuykxWndd81Xyi2rZWN_DU-XUYJs_I5uABurV0qdDRjsdSMp_P1xqmg3sp-vU2ZPFhAXtNs9v6CYuzDlqQMAzaj0sujawW-LuRgQNZVrgI6Nd0TuGlMBhtZWPg_pAr_KGDuip-wrotDZOhjPAKCvVsE7lhAzSkdJ0rArJUob8VbL1f-h7QonxYfGrXsTZLYlbh41_jVKREvUS1lqJ7n843C24xjRGKg5ovDQes_kgDmxXSKnlhAtBx01bMBS-jqbRRjKGU0vqnv04ph4aEj8jj654qZFdb_UJyTn0llhqCbXhZw00FQXoDOGIpkzFA0621yTJn7a4JnL2lzc3VlcmovdmFsaWRGcm9t" + } +} diff --git a/e2e/fixtures/pol-amoy/amoy/oa-amoy-minted.json b/e2e/fixtures/pol-amoy/amoy/oa-amoy-minted.json new file mode 100644 index 0000000..ea26b38 --- /dev/null +++ b/e2e/fixtures/pol-amoy/amoy/oa-amoy-minted.json @@ -0,0 +1,34 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "version": "e701574c-bce2-4e96-8c5c-cb9d02c4ce28:string:https://schema.openattestation.com/2.0/schema.json", + "$template": { + "name": "c1fe588b-da05-45af-afee-3680a9414b39:string:GOVTECH_DEMO", + "type": "f2779150-a9f7-48be-a4f4-7685ca9b6f33:string:EMBEDDED_RENDERER", + "url": "c3b6972d-e54a-43cf-83c4-11d2063207a6:string:https://demo-renderer.opencerts.io" + }, + "issuers": [ + { + "name": "14003050-4b55-47d2-9cc5-24e17b05275d:string:TrustVC Amoy Issuer", + "tokenRegistry": "ab2394fd-f6b9-4094-8f3c-37da1515abe7:string:0xa5f9a7106a599E4caAFacE6872da097aa802Cc64", + "identityProof": { + "type": "ef0308c9-0a7f-4fae-a38f-7d1f3797712b:string:DNS-TXT", + "location": "c8155f34-c97a-4745-a576-7e52eee1f5f0:string:example.tradetrust.io" + } + } + ], + "recipient": { + "name": "0f987694-19cf-4b29-a5ab-3aa7cde13246:string:TrustVC Amoy Test" + }, + "network": { + "chain": "f999cdb8-445e-4e0e-92b1-5d554bc3c852:string:POL", + "chainId": "a5a27920-e63b-49a9-b4df-2f2af37a8c24:string:80002" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "8d4ddb4f0252c1d61f0b72ad585573317c2d3f9268ebbd6d785699e12ebbb077", + "proof": [], + "merkleRoot": "8d4ddb4f0252c1d61f0b72ad585573317c2d3f9268ebbd6d785699e12ebbb077" + } +} diff --git a/e2e/fixtures/pol-amoy/amoy/w3c-amoy-minted.json b/e2e/fixtures/pol-amoy/amoy/w3c-amoy-minted.json new file mode 100644 index 0000000..b39b74b --- /dev/null +++ b/e2e/fixtures/pol-amoy/amoy/w3c-amoy-minted.json @@ -0,0 +1,64 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/promissory-note.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "PROMISSORY_NOTE", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "PromissoryNote" + ], + "drawerCompanyName": "XYZ Exports Pvt. Ltd.", + "drawerCompanyNo": "CIN-XYZ1234567", + "drawerJurisdiction": "India", + "drawerWalletAddress": "0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "drawerPlaceOfIssue": "Mumbai, India", + "draweeCompanyName": "XYZ Imports Ltd.", + "draweeCompanyNo": "REG-XYZ9876543", + "draweeJurisdiction": "California, United States", + "draweeWalletAddress": "0xca93690bb57eeab273c796a9309246bc0fb93649", + "dueDate": "2025-06-19", + "currency": "USD", + "amount": "50,000.00", + "clause": "Payment to be made in full without set-off or counterclaim, subject to terms agreed between Drawer and Drawee.", + "signerName": "John Doe", + "signerPosition": "Chief Financial Officer", + "signerTimeStamp": "2025-06-10", + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPMAAAA7CAYAAACuTbzmAAAACXBIWXMAACE3AAAhNwEzWJ96AAAMUklEQVR4nO2dvW8byRXA31IUpWMj/gda9weKhwBptQZSpElMQ02AK8QNDkgRBKZzAZLiCFNgiiDFWcIFsJEipIpDmhCmAbeBpTYIEIr5A271H4gNI4sSN5jVW3s4nJmd/aAoiu8H0DLJ/eDu7Jt5877G8n0f5sGoZTsA4OCh+8WG11OdJua2JQCoAQD7ewEAvWLD8+ZyEQSxRMxFmEctmwnjE+HjUwCoFhvehbBtBwD2xW2LDc8RPmPbVgDgBAC2uI+HrCMoNrx+phdBEEtGLuufO2rZTYkgM3YBoCls60gEOdgWjyPSEQQZ8P1JZhdAEEtK5sKMKrDpd1XNtlMj86hl2wCwo9h2CzsGglhZ5iHM25rvxFG1FOO4cbYliJVjHsJ8HuM7nXo8ZdTCOfHQdHuCWDXmIcyHmu86/Jtiw2PvzyTbDcX5NVJXHPeALNrEqjMvazYT6GfCx0fFhjcjjOhqqnNzZCaUTZVwjlp2lXNNMTrYKRDESjNPP7PNCegJjZwEMV/mJswEQdwt85gzEwSxAEiYCeKBQMJMEA+E/H24jHe//3Hts9ykupnzS5tw09vI3XQ+b/33wmBXgiCQhRvAvv+d09m0rvY3ctfwWW4CmzkfNuHmbCN345BAE4Q5C1WzX//259Urf2P/0i/Ah0ke/jfJweXEgktY27mcrOmCTwiCEJhRs8tulwVjsFRDb9Dei+Ub/umvjpy8dQ3vXn9tlMX0wS9MB5FM2D/X4PsTgLU1mxqLIMz5qGaX3a6DIZS73N4slro+aO8piwX86KtOqWBdN9fhurZuXW+tWzeQt66HmzDubVjj5vevGjMdwje/+aq0mRs3N6zxs4J1BRvB6wMUrA+waV1BwQpU7tOf/OnflAlFEIYEwlx2uyw8sq3Z5WjQ3psJxSz/8u+lnHVzsmbd7BSsMazDNaxb7BUINGzCGDas8WnBujopwBjWrTEUrCs7b42rBbje2swF34NCoA9+9ud/yeKzCYKQkEe1Omp++qzsdnuD9p6gPuebE/82x/iK/WMBAGdPu7x9vxuM9tPfDcGCtzCBPuSCOGsxbfLM4DcRBMFLIyYtiHnGMuozKYt+rgZWHiYopLcCbckE+pbb/x8wQf32L9+FlurmH5/t1/zbQgWsY+n5PnS+/PaELNkEEYM8GrtMmCoOUHa7laAT8HNwK9BW8PmnEdr6uC0KNEtrrLZftWaMY98cHXfE9EiCIOILc9IKHp/2CwQahBE6HJFvhfrSAucfr/5ARfcIYk7kYhTDm1J7Z+bPTKBhDSZ+Hm78Nbjy8zCGPIz94PX83euvSZAJYo4wCexFlOMJkRmkjqfeyQX69J9//TUZswhizuQwMERVjifkeNaSHVCfKfszLdDDKz+vq9ZJEERG8EEjVRx9eTcRG7EPB+09pb+Xc21N17+2JqcAN7XB335hFEXGlcrti4XyCYKIZibRAq3UgXFLMRrrhDq0jBuHgqIQd7hOhHUgdarrRRDxWGjWFNYJ6yv83E91a04RBDHNoosT6AJWaK5NEDFYdHECXcAKrWCRMTiFmvEsDNp7lNDyAFi0MPcVi8yB6NeWgZle7zP+TY/j2AqWjJKQFXdnjFp21vM5tvABJeJwZCLMZbdro1r80SLNjFqD9l5UoEgH3VsyVZt80wQRg9RzZkyf/AEAXmCvv4urWfyn7Ha1AomF8R1hDSpmzXaLDY+WaSUIDmYwHrXsOlv/XLbkcaqRGdVcXR40S51kbiqlUOOCcDYupA60aDpBTIPLPTnCksYzcpJWzTZRhZsm25EQE4QScd02KYmFGYNEVIuf82yxEXxORiXWATzWfC8zjp1FhK9SpzIfdO10qHiWdPvQ2mUCaUZm0zzouTFo713osr7Kblf28cUirNXoFmIvGy31rNPo4zVkdQ4Hz1HCh93L8lqFa4A459DZQEYtW3oPHordBIOjKpzMsOvysl5MMY0wP+gRDAVD5KPwYSx7BecydZnlHrWXOlr6xdJI4TYs86zJwl/LbleazKLzCqAngU1lqjKvQNntDnHkS+Qd4K5B5XUIz9ELryPJeZKCthYxJuGjoOD3YVv1+DBhLh+AR5kbgMsPywYx6T6jll3DthHb/gV+f4bLF/eE/RzOM6TCEYxgXmJhZg912e2eGajawyX128pU9Mdlt3uBLjX+umcCXHAU66mEmIMlqFTLbreu8AErg2fQk3AYUfZpCx+eWlyBxg6rY1BWaou/jkF77y7j6g8l9+0AjUYdIY5B7BSlbazR9iom+6DQ9wx8+uwZejNq2ceYjxB2CE4o8Bp2heOfpnVNRaVOAvZMD4UKNpq2A0NBPjEQ5JCtCK+A7BxhRVWT+m2Av+VlzOO/iXF8CK8D910kJbz/qoCkeWMiyDz7WZTNSiXMOOK6mk2OdG6pJaQZ9XCjWnoSUwhiYeASTHv8asrjt/EYi6JmaJzNHFSRk0TZPUG1PDGpg0ZQpXrEVBs21OPrCAC+kNXaXnJMBDRK7c2Cuamx2Bmpjj/Etn2KryNNlZoOHmsRzPv+61AJ5Bner1BORI5xRE9MJuGcaPRY+ThZNEbtK74eopCEDVZCw4xqe9U5lMY0jKRrcm6bMMw2zkihymQ7RmMcb+jpld1uU1qc4vYY9RV8LmTLKrG2d3gj2ahld/CeMcGuCZZtTxB4WfudC+65/r1Y0nUJOccHODSohH9VmgjrlasSSy8ThlDATUcT1TlkwgY4QnZidBqy458O2nvSEQfPV0M7gaja1hYszGIHeheWdk8hfBXeSFZseDUm0DL3G1rceau7LEmlIyaakDDH51j1YGt87zWVy4bZHXB0izROaQJ1zjW/iZ2jhvtqDUKoWchGfdNIvzfCZ9vsmHftrkLOxNHwjugrtJT3o5b9FjsW5iK7yNqPTsIcjzOd0Ch65OOo7DFmJETXVJT1W9VZmIx+TQPrrmrlzTeKABwT7AVFa1UXVEtOJ6BP8NUetexTFOxOVr9z0ZVGlo0khifT3jeN8SNyX+xQokoqLzyqLyPeZh1dZQrmGOg8PCG7qI15sgyoJGSVz+zgXMtBleIM85kfWk5ykqg30143ce8cIyT0ImJu/lCquyw0OpHNeTFEVax2KyMI6mHbFxteKnnJIp+5g1ExT7gHhc3rXpbdbn+B7on7gmlJnsSle9D4FLVNyeDBohzyjGAhmsWGx6YYz2dqy8t5OWrZqXzzafOZaxFW0h1UAVelxpQsvJWFODZ1oycKo4n7SDXi1A0KIJr4/FW/8SCpoC9hKG+SwUfZtjjaHmKyhRPhKqymmW6lVbNNdP1d9rAalBB6CMhCPbdR3ZIKW0SQxhSaePh9lqShionGziIq1jeYV5fd7rlkBHd0CyFw11FakOU6S3QCJW1DWS4+xmfX0XLdxzl84HLCKDGZOzKVzSKxmq1xY8hYlZFZJZSBsInqMNoa+jFDD1XnYCGUTX5aw/6Pbq84o6Ps+KxDVkZ0cR1SX/wN9xyZ+rvPSvOIH2KopUwLPVds28cOdGYejC4p2X2O8xzMCH6akVnlxpCxEvNmHNlOFWrULtZFCyN3KgnDDjuaGHH28LzA0fsiYYzwoSLdkT3ITtnt9rBzCFXLqhA19gKDSJp3nD2VBFXSzEsUaD6STjVw8dlSFUlG3e6oZfexzfp4LFsxyqu8DTJt7AlGkfXCtkhjAIujNq9SVYhahAtoG4UsUfxwGHEVsdlO0pK6eHzV/HobS9i8QaPne3wvXss2agr33dV1qGmrbS7NUKeB8tMPVVDPDt6zH/CeqbLdVOq9Stb2+bZILMzY6LKAcRkrs8yM4aqaac/Rm1lON9vjdzI4vnvf7SQ4j03TVi7vz0b1Oc19U7mmjKZJd5HPfJBlaZxlAIXBNVz3OuQozqVhJFqcfYZxHjQ8/kGc38ThLoGKHYBx0HHbClCQZ66RxVwnFGhXVdQSzxM5cKbNZ+5jKpzqRhxEWUEfKvgwVwwals2hnyZJF8V9Hhs09CkaIWMJGLbdFyyiynAXtt2jZRHkEBSWsK2ihJpt80i3SikK9HOZcUwCa5vHBqueVqPaOZNVINF6WcUHpsStaLHQubKiplbfRHDQCiyS6Jq4+yMaDXtZqaLoXXCEc1zgOVK3A14DXzCwgu0cFic8SaqBYYmfmfl1seFFekHQcize15M0SQyKGlzBNcaNo8ZAkLCYX2gIDu9Z4LaKeTy+ptknwzKA939aaNLK79QpqAAAAABJRU5ErkJggg==", + "pNoteId": "PN-9081-2231-SGP", + "commitmentDate": "2025-12-10" + }, + "type": [ + "VerifiableCredential" + ], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "POL", + "chainId": 80002 + }, + "tokenRegistry": "0xa5f9a7106a599E4caAFacE6872da097aa802Cc64", + "tokenId": "d320d1e7eaf6a0f9ec185c8b25470d027115ef2059e5b1bcb41cde09f799be75" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ea8ea-2cf5-7662-9ab6-4b8b261174c7", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-08T20:26:19Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhA2a6bF4PPP3Mnid815CspDt-DMcGPm-iDwkYPBY2KgbprArYR9urtjfaaarNzxxsnBVuLUVJRmgBJdPAKkPhp0lgjgCQCcxtBLaHQBHKdzPUjrOoAUVnAqpYInt6hFitn3f96aotYIPgjo4q0O9-JKXdEK5MyNbPcr2XTCY0MD2hJ_gWjp6hdmB9YQCP8qUh7sZnTA9ATmpuIjMPwVkUQTACNPWiM1LYUHlPMxSVOChUnWnCXL7DRs2ZcwbDkBzLjHOoDMi1JxdjnzJ9YQG_tUBTFL8R9cKH04hvAdaNi71BK8qoQqNNe0f_89R2yuWR1fFe2dtI9edydW6qiNvSwXtuCFAhRQOZqlt_8Q3lYQPob4-pdjgIMUnLjYP64LYKq45uwgd6XyXGwUO1l7W7GpO_kgAKuM99t1MXp6IB6A9XbRNYaCSiJAgCbyqodHbJYQNPsYqo-lf-CPvcv0fC2kOXvaFQsouhiuCVdWSYXEsVCvxw96-Z-lZm9ywHLl1ZTCefxgikLkcYnLod232LGVqJYQDdGVqY1bWtTC6A_knvz9l_JGLJlFE_VFg4Ke4_Ipmzfu9mBQU-47e_11FB9ksO4cvvTstFWuxpAEC_JP7RqRJ5YQA3cxqybEuYIqSRkyDvmSaYIdcLrOsNWXL2kI-24SvhplRJH5S44BVPK_cvVAtHXLtDurfqeHjrmRnC0Cid_0DdYQEi0vKYmHUQGVuJuvUpmtoWsPCiW3uXUhrQUzXqK02YpLwV9Rv7mpi8Ttf4ZKyB94sdTh6YIJ9I3-A9OXjQsvFxYQDAl3ueb3hT243goN3x8oZWZ10whyuR8FOGUCBH0OLHBBvFDGvYJxgGpoyTanZP3rda5KTGp8FwRg0GPWJYL4wRYQJxc7azJM-xLzBNvdaRkXo79nFW44uNVh5MdURrVr8o-ZtBcSEAih0M22Si56IHwJEOdEeBg7-gR7T5Id1ERSpZYQMIuWoTRj1efe2uYiZyf1Ls65uCjTmdLXlstDDgGNVSeZY25cKuxiFORPkWDzxYF-f8UMXzN933O3f-eeB5bnPNYQGbc5MuhppkPQMSTO720vxYfXNSTT9efTsnx6JViQGsyNKlk01Uq5Q7uEyAl60bBFIfOCvwS8Fi5wlSs_dPb-uFYQMbKw4rwwtb9a4DGVHMOJ5jfDQ4sdHFUY3OC3tFf5L8M_shEJSbj_b6_9eNAuZ2GYIrKXM_md3UiWYHQX73TIXdYQGPFJpDLxCtFLpwd1Zc9_yXpRhG1TKKX9yJZArFM8x0ZZwAHSMUXt6mqADMDR1kd3o1jT4WsKZ9am3pWugyDFtJYQA5iROJ_BPhMBm1gPmJF71XcIFhMRSbxq_EZIKHTN4zrNKvJth4_tPir8IQpES8DxuV_25bYvmUMTh2RA3XAMlxYQBenzrw26uucwbHZ7wo_QpkLQFroVPJhBbgPoOHyO9nwkm77jOagHUHapviZdyCCXF6e_zia4dWek5kB5DmcMglYQJO44U9o4BUZ59DFch5dYDIdk7nUSKAd4TUK9QTYQMjauUaNAxpFeuwZdAh8oSSfQ3chjFmg1jpn9kesq43xWQxYQABM0ACr639sNX4x3jH_NRkfxFbiKDQJ-DukfF8UYD_Y1aY-j47JcHpIJhu1WhafVCqKkrRvr0dZ3PymQZnt7LVYQCXMa2Z1j_p28XLE0SqvKae10V-q-dwc_hGI_Eyx_obbPEw02ErzOd4dMpUTffsIU3Tauc-UwNs7iK_FdJYzaBtYQOSssxQPNn1qMR_AHonbY_UPNYb6aY9ek4HMrh2FEUWBllKOO_-j5nRIs1M_e9yrmMaxPYJWi4wxpaFgR1SkXZhYQBGUhHcZ7fEHYGkCuWcofP8VNs_z2FifSzQ-U2pok0Mz4M6hZ1Kn-r6c6AD0KyJUZq7yARCa6ZVwJB2OoF9Wy0hYQI7QjPqTZoDArXYrSa21EN_5zmCn7yWeXzyyDe3bEsV0jTbuQ14sTj5-OCXsqf8PITGVbWp2cZgE6dBch4KRR7hYQLcw1Pcl94lXpeNzjPIg3jtPgklA9_R3fNthHSt1PHOkEznmowHnZgZWo-3C4oyeD8Lpt0ARBOYSqbUqLGk6mGtYQIrpRQ5AyxUYZGtEXvcMe1Vbyc7Tn1rRB7Ev6Z0h__iAum798w81mnJU5eIlyRwAyIQ0cwnGf6Zo74JcQyh4sH9YQIfhd4d0Y23Cufs2VQBHi86tlqMtrHk2RTJy455m_DzX0qm_nQty90WDKDC92A3rRxPqi_ZxX2c-ChLrPoxLja9YQF_6ODroXBzfXkm9MYcyQVZ0SsfLdPliMmy9gem22PV7fdrSNvPY0hiqs6qPlFuVt2zBNEpf03R6axXzV2iAJhpYQNXGgigVpkgO8BrYvQWvDMKslyi6oQwG3i2AjcdzxCot72c79Kj-54G1kMMZs1E5jbyYuYzTOuFcXUjbJp0taYpYQKTpzL3cXC7dXgGDN6ke18BJ6pRvSuTAqK1UqIbfq6PyP3pys3fm_O4xsbEvAJjXddMBEigQ3dQOoQiBPX1GRrVYQMD5sLp7muEOz0LBub6_bJDvJmOwL2duPrU3FVXN1po0pcddNcBCYB7XGPHK-ptrqGpVIX4jyxJprKLQR0bsyJZYQJBIZ6wZV0yCPzN7p9q6-qMOCb1wa5jIew9NnG9akwDMiAciLZuR5TE0NQoalY7m7aICiM8lbEVByAdddwECxJZYQJXbLhIt1YYHRxAygGPM2m-i7E98ySYHLZ99MdZ6SSMvP_FnakQMlDeHoN7Z5V9f9von_QoqS4mijhOhR5wsfKpYQKFsz3VVgvYOYtvs-6mwX97tTOv6OlYYwa5NTzptPz_tttNjbtqT_8D0cwCVWjlc4M4daOmjXZo7KmXtqDnh3WGCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} \ No newline at end of file diff --git a/e2e/fixtures/pol-amoy/pol/oa-pol-minted.json b/e2e/fixtures/pol-amoy/pol/oa-pol-minted.json new file mode 100644 index 0000000..31cafa3 --- /dev/null +++ b/e2e/fixtures/pol-amoy/pol/oa-pol-minted.json @@ -0,0 +1,33 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "$template": { + "name": "d08b56ed-9f91-44d8-8748-4ef17c10084e:string:GOVTECH_DEMO", + "type": "17fbeec8-9712-4e3a-bf17-dd74ba348644:string:EMBEDDED_RENDERER", + "url": "a1061e20-318c-4bde-89d5-1ec42ef1eea9:string:https://demo-renderer.opencerts.io" + }, + "issuers": [ + { + "name": "7c8c3632-df92-492d-84fa-bb59363c9cf0:string:TrustVC POL Issuer", + "tokenRegistry": "0a0be8f4-c4af-4ec2-8bd8-ef787f72ea0a:string:0x0961d9C2dA9a7105fDFC9DC4ec45951C024F88B0", + "identityProof": { + "type": "21a24a77-34fc-4d8a-9cd4-7678304ce11d:string:DNS-TXT", + "location": "e201feac-f6cc-466c-98ae-3cc35dd03891:string:example.tradetrust.io" + } + } + ], + "recipient": { + "name": "9847a1cf-8151-42d7-b240-607d7a0f2fb7:string:TrustVC POL Test" + }, + "network": { + "chain": "da056415-f675-49d8-942b-6c4c76bf664e:string:POL", + "chainId": "39922aa7-aaa1-49b8-a77c-d230eae018fb:string:137" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "5382d7c3c19d4b5730537a234b01b2084fdd71c3196dd0f5df00b23d9756d8d0", + "proof": [], + "merkleRoot": "5382d7c3c19d4b5730537a234b01b2084fdd71c3196dd0f5df00b23d9756d8d0" + } +} diff --git a/e2e/fixtures/pol-amoy/pol/w3c-pol-minted.json b/e2e/fixtures/pol-amoy/pol/w3c-pol-minted.json new file mode 100644 index 0000000..2cf74bb --- /dev/null +++ b/e2e/fixtures/pol-amoy/pol/w3c-pol-minted.json @@ -0,0 +1,64 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/promissory-note.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "PROMISSORY_NOTE", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "PromissoryNote" + ], + "drawerCompanyName": "XYZ Exports Pvt. Ltd.", + "drawerCompanyNo": "CIN-XYZ1234567", + "drawerJurisdiction": "India", + "drawerWalletAddress": "0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "drawerPlaceOfIssue": "Mumbai, India", + "draweeCompanyName": "XYZ Imports Ltd.", + "draweeCompanyNo": "REG-XYZ9876543", + "draweeJurisdiction": "California, United States", + "draweeWalletAddress": "0xca93690bb57eeab273c796a9309246bc0fb93649", + "dueDate": "2025-06-19", + "currency": "USD", + "amount": "50,000.00", + "clause": "Payment to be made in full without set-off or counterclaim, subject to terms agreed between Drawer and Drawee.", + "signerName": "John Doe", + "signerPosition": "Chief Financial Officer", + "signerTimeStamp": "2025-06-10", + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPMAAAA7CAYAAACuTbzmAAAACXBIWXMAACE3AAAhNwEzWJ96AAAMUklEQVR4nO2dvW8byRXA31IUpWMj/gda9weKhwBptQZSpElMQ02AK8QNDkgRBKZzAZLiCFNgiiDFWcIFsJEipIpDmhCmAbeBpTYIEIr5A271H4gNI4sSN5jVW3s4nJmd/aAoiu8H0DLJ/eDu7Jt5877G8n0f5sGoZTsA4OCh+8WG11OdJua2JQCoAQD7ewEAvWLD8+ZyEQSxRMxFmEctmwnjE+HjUwCoFhvehbBtBwD2xW2LDc8RPmPbVgDgBAC2uI+HrCMoNrx+phdBEEtGLuufO2rZTYkgM3YBoCls60gEOdgWjyPSEQQZ8P1JZhdAEEtK5sKMKrDpd1XNtlMj86hl2wCwo9h2CzsGglhZ5iHM25rvxFG1FOO4cbYliJVjHsJ8HuM7nXo8ZdTCOfHQdHuCWDXmIcyHmu86/Jtiw2PvzyTbDcX5NVJXHPeALNrEqjMvazYT6GfCx0fFhjcjjOhqqnNzZCaUTZVwjlp2lXNNMTrYKRDESjNPP7PNCegJjZwEMV/mJswEQdwt85gzEwSxAEiYCeKBQMJMEA+E/H24jHe//3Hts9ykupnzS5tw09vI3XQ+b/33wmBXgiCQhRvAvv+d09m0rvY3ctfwWW4CmzkfNuHmbCN345BAE4Q5C1WzX//259Urf2P/0i/Ah0ke/jfJweXEgktY27mcrOmCTwiCEJhRs8tulwVjsFRDb9Dei+Ub/umvjpy8dQ3vXn9tlMX0wS9MB5FM2D/X4PsTgLU1mxqLIMz5qGaX3a6DIZS73N4slro+aO8piwX86KtOqWBdN9fhurZuXW+tWzeQt66HmzDubVjj5vevGjMdwje/+aq0mRs3N6zxs4J1BRvB6wMUrA+waV1BwQpU7tOf/OnflAlFEIYEwlx2uyw8sq3Z5WjQ3psJxSz/8u+lnHVzsmbd7BSsMazDNaxb7BUINGzCGDas8WnBujopwBjWrTEUrCs7b42rBbje2swF34NCoA9+9ud/yeKzCYKQkEe1Omp++qzsdnuD9p6gPuebE/82x/iK/WMBAGdPu7x9vxuM9tPfDcGCtzCBPuSCOGsxbfLM4DcRBMFLIyYtiHnGMuozKYt+rgZWHiYopLcCbckE+pbb/x8wQf32L9+FlurmH5/t1/zbQgWsY+n5PnS+/PaELNkEEYM8GrtMmCoOUHa7laAT8HNwK9BW8PmnEdr6uC0KNEtrrLZftWaMY98cHXfE9EiCIOILc9IKHp/2CwQahBE6HJFvhfrSAucfr/5ARfcIYk7kYhTDm1J7Z+bPTKBhDSZ+Hm78Nbjy8zCGPIz94PX83euvSZAJYo4wCexFlOMJkRmkjqfeyQX69J9//TUZswhizuQwMERVjifkeNaSHVCfKfszLdDDKz+vq9ZJEERG8EEjVRx9eTcRG7EPB+09pb+Xc21N17+2JqcAN7XB335hFEXGlcrti4XyCYKIZibRAq3UgXFLMRrrhDq0jBuHgqIQd7hOhHUgdarrRRDxWGjWFNYJ6yv83E91a04RBDHNoosT6AJWaK5NEDFYdHECXcAKrWCRMTiFmvEsDNp7lNDyAFi0MPcVi8yB6NeWgZle7zP+TY/j2AqWjJKQFXdnjFp21vM5tvABJeJwZCLMZbdro1r80SLNjFqD9l5UoEgH3VsyVZt80wQRg9RzZkyf/AEAXmCvv4urWfyn7Ha1AomF8R1hDSpmzXaLDY+WaSUIDmYwHrXsOlv/XLbkcaqRGdVcXR40S51kbiqlUOOCcDYupA60aDpBTIPLPTnCksYzcpJWzTZRhZsm25EQE4QScd02KYmFGYNEVIuf82yxEXxORiXWATzWfC8zjp1FhK9SpzIfdO10qHiWdPvQ2mUCaUZm0zzouTFo713osr7Kblf28cUirNXoFmIvGy31rNPo4zVkdQ4Hz1HCh93L8lqFa4A459DZQEYtW3oPHordBIOjKpzMsOvysl5MMY0wP+gRDAVD5KPwYSx7BecydZnlHrWXOlr6xdJI4TYs86zJwl/LbleazKLzCqAngU1lqjKvQNntDnHkS+Qd4K5B5XUIz9ELryPJeZKCthYxJuGjoOD3YVv1+DBhLh+AR5kbgMsPywYx6T6jll3DthHb/gV+f4bLF/eE/RzOM6TCEYxgXmJhZg912e2eGajawyX128pU9Mdlt3uBLjX+umcCXHAU66mEmIMlqFTLbreu8AErg2fQk3AYUfZpCx+eWlyBxg6rY1BWaou/jkF77y7j6g8l9+0AjUYdIY5B7BSlbazR9iom+6DQ9wx8+uwZejNq2ceYjxB2CE4o8Bp2heOfpnVNRaVOAvZMD4UKNpq2A0NBPjEQ5JCtCK+A7BxhRVWT+m2Av+VlzOO/iXF8CK8D910kJbz/qoCkeWMiyDz7WZTNSiXMOOK6mk2OdG6pJaQZ9XCjWnoSUwhiYeASTHv8asrjt/EYi6JmaJzNHFSRk0TZPUG1PDGpg0ZQpXrEVBs21OPrCAC+kNXaXnJMBDRK7c2Cuamx2Bmpjj/Etn2KryNNlZoOHmsRzPv+61AJ5Bner1BORI5xRE9MJuGcaPRY+ThZNEbtK74eopCEDVZCw4xqe9U5lMY0jKRrcm6bMMw2zkihymQ7RmMcb+jpld1uU1qc4vYY9RV8LmTLKrG2d3gj2ahld/CeMcGuCZZtTxB4WfudC+65/r1Y0nUJOccHODSohH9VmgjrlasSSy8ThlDATUcT1TlkwgY4QnZidBqy458O2nvSEQfPV0M7gaja1hYszGIHeheWdk8hfBXeSFZseDUm0DL3G1rceau7LEmlIyaakDDH51j1YGt87zWVy4bZHXB0izROaQJ1zjW/iZ2jhvtqDUKoWchGfdNIvzfCZ9vsmHftrkLOxNHwjugrtJT3o5b9FjsW5iK7yNqPTsIcjzOd0Ch65OOo7DFmJETXVJT1W9VZmIx+TQPrrmrlzTeKABwT7AVFa1UXVEtOJ6BP8NUetexTFOxOVr9z0ZVGlo0khifT3jeN8SNyX+xQokoqLzyqLyPeZh1dZQrmGOg8PCG7qI15sgyoJGSVz+zgXMtBleIM85kfWk5ykqg30143ce8cIyT0ImJu/lCquyw0OpHNeTFEVax2KyMI6mHbFxteKnnJIp+5g1ExT7gHhc3rXpbdbn+B7on7gmlJnsSle9D4FLVNyeDBohzyjGAhmsWGx6YYz2dqy8t5OWrZqXzzafOZaxFW0h1UAVelxpQsvJWFODZ1oycKo4n7SDXi1A0KIJr4/FW/8SCpoC9hKG+SwUfZtjjaHmKyhRPhKqymmW6lVbNNdP1d9rAalBB6CMhCPbdR3ZIKW0SQxhSaePh9lqShionGziIq1jeYV5fd7rlkBHd0CyFw11FakOU6S3QCJW1DWS4+xmfX0XLdxzl84HLCKDGZOzKVzSKxmq1xY8hYlZFZJZSBsInqMNoa+jFDD1XnYCGUTX5aw/6Pbq84o6Ps+KxDVkZ0cR1SX/wN9xyZ+rvPSvOIH2KopUwLPVds28cOdGYejC4p2X2O8xzMCH6akVnlxpCxEvNmHNlOFWrULtZFCyN3KgnDDjuaGHH28LzA0fsiYYzwoSLdkT3ITtnt9rBzCFXLqhA19gKDSJp3nD2VBFXSzEsUaD6STjVw8dlSFUlG3e6oZfexzfp4LFsxyqu8DTJt7AlGkfXCtkhjAIujNq9SVYhahAtoG4UsUfxwGHEVsdlO0pK6eHzV/HobS9i8QaPne3wvXss2agr33dV1qGmrbS7NUKeB8tMPVVDPDt6zH/CeqbLdVOq9Stb2+bZILMzY6LKAcRkrs8yM4aqaac/Rm1lON9vjdzI4vnvf7SQ4j03TVi7vz0b1Oc19U7mmjKZJd5HPfJBlaZxlAIXBNVz3OuQozqVhJFqcfYZxHjQ8/kGc38ThLoGKHYBx0HHbClCQZ66RxVwnFGhXVdQSzxM5cKbNZ+5jKpzqRhxEWUEfKvgwVwwals2hnyZJF8V9Hhs09CkaIWMJGLbdFyyiynAXtt2jZRHkEBSWsK2ihJpt80i3SikK9HOZcUwCa5vHBqueVqPaOZNVINF6WcUHpsStaLHQubKiplbfRHDQCiyS6Jq4+yMaDXtZqaLoXXCEc1zgOVK3A14DXzCwgu0cFic8SaqBYYmfmfl1seFFekHQcize15M0SQyKGlzBNcaNo8ZAkLCYX2gIDu9Z4LaKeTy+ptknwzKA939aaNLK79QpqAAAAABJRU5ErkJggg==", + "pNoteId": "PN-9081-2231-SGP", + "commitmentDate": "2025-12-10" + }, + "type": [ + "VerifiableCredential" + ], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "POL", + "chainId": 137 + }, + "tokenRegistry": "0x0961d9C2dA9a7105fDFC9DC4ec45951C024F88B0", + "tokenId": "1174afa500e1b265450b55200cb16487e92e7c5410cff84b693eda59194b10fd" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019ea68d-006c-7887-9ea8-3f54f562ac65", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-08T09:25:19Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAHlKJtL9UV-_snL5rOlLyCznZu_oNyzOE3s6XAFR4USM0D68IJsm6qf5M01opyFXDW3Xn8mtLb6AZEgRWH6C4fVgjgCQD-WN_Q-KfWRbl6pQ5HB4u4khdD6xR1mPuWcTcLYNwPkhYIJy9GT0cT7-l_I9XOnoDDJyy5IV9LvUECuSSvNoluakUmB9YQDn8hL0e7mW-1DC0i74pcWcskNkMU82TgfA0P1eeJLFHdkuhd-HhqWH2wTd9CG48KJ0UvVkt3jzPXWHMhkkxzMRYQCnL8QQIZ-Ki2Cjf1_u43B3AM5BwAAXiC2NkfK6AhcWVoBnVtEBN2vBZc4pWJveWd_qVJU5ALqL3Dz1JmIAwkHlYQNfW5JmtYILhhIZufZ9j4FX9IA4x9hk0ULLhEenxAaYlfnYnewVsI3AvRdGmJc6QwL1PTR-hTVG3txGVL3SNWBtYQABtgC4W-r6VH649Et1xGg1NB2VE_ZshNSK2yQN1hDok36f6bwcAJ1n91y52u3XmpxOYyGmsPM8yp6udzO9YRwtYQAQz4UhnkiIQovoJHD6Y-kq3X2YegxXFTnh4zH_qNWvjhZVa0nx9CCDvBDpmlH0lWqSAkNiTTx0XWE298vAK54xYQGFfs4um2IWamhe_4da7qsInmTR5VZgIhqPlkfaQd4-Vw9INv8orNrqXOhIMssCG1MCAr1vnsM6zVq75fVnABP5YQA0idgyw13Uwb8N4e_CFH_kIX9M21lLmeZ_ZWA9z5HfsN8qxBEU4VeODqi97QjgRtVBKL4ijHXT1_-YZyZZByB5YQHcGLRUvnezhWKd8kDw2cn12hfnc6rLlyy3dXUDvUzfr6n3zUqCA_cDopBbmhtGIQTHMff4uuiiFnT0a9dRkC09YQKbQ0HIMNzM2IkbGp14_JouEXXhvR3rMCKb8y2S4QzrqrZZMbbTNQaoHvTi07DbEeZINZlfJa-OhtIt82ulauc1YQJGDTkF2B9txoMSEZqHn5dKuw5-XVxIt7c-FGeeMQ0cZ3bW3P5EorCyF3Vq3iCP2a8gGyndXbXRp0ZiJhxLp2y5YQGNf8SRVKhEMF5FSH4xgFokxbcp4Kl2T70gCfGVJigO_kjxyZt8H69gNDnNYSc8QzpkFKT3UxWz_tZSQ9Ia8IIJYQJx0MTX75Tw_qBhANFD_brQ6L-AzNBjm_OH5bh8gAVusyVhnDpmXY51gQrN6JyjqtLxaYtjY1cfDJwuC35atF8xYQHAl47bk03u2wlrCHigRI5e37vqpR1JDzegTysqwLWqduOWqgU948Rk2upFSrQyhmgFX7Fl7DtBuHo8ZpgMujUlYQChDnKQjbDqWalmDH8w8LX474u9CYIFWK4cQwBlKhBADVfKU1Qqica4w9bzA5GNfjB33CX9XUMplTJSowJEUr1FYQBkKA9cJV4Um_B88M2n5_baaiAPFznINZpMLK5EJgQ-0wUuvI50_t6K8bWegTer1fnQOSnAlfBtUcK8yYL_QOfJYQLlh6ZzWPSorsSl3JZm9rp2L_lxiTbY0DWY9pSJMMiA9EKQaTZkpZqeSKEmoT6Aq-eFAuTbwr906jhg4NprWI1RYQEghFR8i1Dc8TpbjkoLndak2DYuG1SxtPZgzVgp1BPyEj5GPyL4FL1a-ikORWgV-HVJMEfarAkSiarXyUgvNxMRYQHkm3JeRRLKAKaP6gAf657NnGmmA1uxzFQ4Gq--ypILf-bpWEE4cTvEWCqfQSD3am8bFOhUJXFB5Kw4UqcTsQMFYQP0klTeYpKIXTeZQfVGBu7TBu2ZAwpDQ2lVVP0mXhP84NSdKKq9sIhD2GczdN_WMe89fSLvOEFY89y_h2SEyWqNYQNkQsRlN7U6tNJClz7rTiRXBEYfJGcHr8DzOsbckVOcovkhLIXPQvza8k87XZVLbCQiM9EZjS-Qi_izstH7RBZ5YQP5o3vy24Z8-mdlf6gyILBobX49kkTJ_-K5QLVNRH49pbxMNri4y2TPRHK6dlH-RmqB0ODEJUtD22k2ctVpvZxlYQODUnQlNDHujgjU-zv2OKx8VULunh8F2Zc5a8zSe8et7nbYiHoR1zoJpny2FJNrcpaZsyCfYkFdMBY92-2fIMMVYQLriZAVY1yLNmVMmsvp1eNLJGuLhVbNW5Yeg0Q7MUDKiQWwfCIUAdpssw4NCzttMVc2BFOIUfLWeY2gOWZGeABJYQMFdZ5HH3AuukE_nIvGY3L7pCFj-fPC98peSXOrlSDndTpMD5YpAJ7llX1mu6eQh-3HM8pcXRyPMgIJ8Mts7brZYQCMMCir0KK66Cwn0PBloywyFio9K9FCVUNwm7EmR6cDET2f1eCMBuAWmogHnQq6Uaq9zbmPlh_61a2AX3plYA1NYQDTEXLX4HprsDgr6z9NQ4zsGughnID20MqLH8Ekcc-oaC-jePS9Oza-aF9AU83JPeYdixWUN_wIJzzp7HxPkCidYQOpN0b7tWiFYXRRF_WeNDkXzRKzUyx_AoysQSnjQ2tibBzdN0-YvGEkeHrxvurr1hh8K9YL4yNsaw7Xpx6CrjSJYQO9Q0rdzs8UlnYhVQYxFbEbmaJppeTTFYjH3rXZ9SmDvPTdkL57r8cqxHCPTpG1xgxL1fuYOrE__p7PZohCwiy1YQHJaNYwpgjeDOPO6Txoz0Q-jkVMDr9XUWM1qp-SL8JtLpqImZ9iw54uHKFxuMuETSSKXEN6ZnKlpbpLDM4FL3i1YQEUVVNdExM1KWU3orB-s5n50br-e7LubUo6FhZYghz1RFvSwFkGmtsqGOk67W0rtUd8TERoHjDq137ocHM4LRrNYQCG5DS_HAcrUXBI_eoxy1AJlKx9L4lY4VsNum6b4_F3lJJQ7wLor0NhbcpK3-0U-Iuf_J4_NKFiFwiQ9ZhE_Ll-CZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} \ No newline at end of file diff --git a/e2e/helpers/actions.ts b/e2e/helpers/actions.ts new file mode 100644 index 0000000..4a2c7b6 --- /dev/null +++ b/e2e/helpers/actions.ts @@ -0,0 +1,204 @@ +import type { Page } from '@playwright/test' +import { MetaMask } from '@synthetixio/synpress/playwright' + +/** + * Dismisses the MetaMask "What's new" popover and any other blocking popups. + * Must be called after navigating to the MetaMask home page. + */ +async function dismissMetaMaskPopups(metamaskPage: Page) { + const popoverClose = metamaskPage.locator('[data-testid="popover-close"]') + if (await popoverClose.isVisible({ timeout: 3000 }).catch(() => false)) { + await popoverClose.click() + await metamaskPage.waitForTimeout(500) + } +} + +/** + * Uploads a document, waits for verification, and asserts all three checks VALID. + */ +export async function uploadAndVerify(page: Page, documentPath: string) { + // If a previous verify result is showing, click "Upload New File" to reset first + const uploadNewFileBtn = page.locator('[data-testid="upload-new-file-btn"]') + if (await uploadNewFileBtn.isVisible({ timeout: 2000 }).catch(() => false)) { + await uploadNewFileBtn.click() + } + + // #file-upload has display:none — setInputFiles works on hidden inputs directly + await page.locator('#file-upload').setInputFiles(documentPath) + + await page + .locator('[data-testid="verifying-state"]') + .waitFor({ state: 'visible', timeout: 30_000 }) + await page + .locator('[data-testid="verifying-state"]') + .waitFor({ state: 'hidden', timeout: 60_000 }) + + await page + .locator('[data-testid="verify-result"]') + .waitFor({ state: 'visible', timeout: 15_000 }) + await page + .locator('[data-testid="check-document_integrity"][data-status="VALID"]') + .waitFor({ state: 'visible' }) + await page + .locator('[data-testid="check-document_status"][data-status="VALID"]') + .waitFor({ state: 'visible' }) + await page + .locator('[data-testid="check-issuer_identity"][data-status="VALID"]') + .waitFor({ state: 'visible' }) +} + +/** + * Opens the connect wallet overlay, clicks Connect with MetaMask, + * approves the connection popup, then clicks Continue. + * Uses Promise.all to avoid the race condition where the popup appears + * before connectToDapp() is listening. + */ +export async function connectMetaMask(page: Page, metamask: MetaMask) { + // Unlock MetaMask if locked. + const passwordInput = metamask.page.locator('[data-testid="unlock-password"]') + if (await passwordInput.isVisible({ timeout: 3000 }).catch(() => false)) { + await metamask.unlock() + } + + // Dismiss "What's new" or any blocking popup on the MetaMask home page + await dismissMetaMaskPopups(metamask.page) + + await page.locator('[data-testid="connectToWallet"]').click() + await page + .locator('[data-testid="connectToMetamask"]') + .waitFor({ state: 'visible', timeout: 30_000 }) + + // Start listening for the connection popup BEFORE clicking so we never miss it. + const connectPromise = metamask.connectToDapp() + await page.waitForTimeout(500) + await page.locator('[data-testid="connectToMetamask"]').click() + await connectPromise + + await page + .locator('[data-testid="connect-blockchain-continue"]') + .waitFor({ state: 'visible', timeout: 30_000 }) + await page.locator('[data-testid="connect-blockchain-continue"]').click() +} + +/** + * Switches MetaMask to the named account using synpress's built-in switchAccount. + * accountName = 'Account 1' (Hardhat #0), 'Account 2' (Hardhat #1), etc. + * Navigates back to home afterward so the extension is settled before the next + * connectToDapp() call. + */ +export async function switchMetaMaskAccount( + metamaskPage: Page, + extensionId: string, + accountName: string +) { + await metamaskPage.goto(`chrome-extension://${extensionId}/home.html`) + await metamaskPage.waitForLoadState('domcontentloaded') + + // Unlock if locked, then dismiss any blocking popups + const pw = metamaskPage.locator('[data-testid="unlock-password"]') + if (await pw.isVisible({ timeout: 3000 }).catch(() => false)) { + await metamaskPage + .locator('[data-testid="unlock-password"]') + .fill('Tester@1234') + await metamaskPage.locator('[data-testid="unlock-submit"]').click() + await metamaskPage.waitForTimeout(1000) + } + await dismissMetaMaskPopups(metamaskPage) + + await metamaskPage.locator('[data-testid="account-menu-icon"]').click() + + // Find the account by name and click it + const accountBtn = metamaskPage.locator( + '.multichain-account-menu-popover__list .multichain-account-list-item__account-name__button', + { hasText: accountName } + ) + await accountBtn.waitFor({ state: 'visible', timeout: 10_000 }) + await accountBtn.click() + + await metamaskPage.waitForTimeout(1000) +} + +/** + * Adds a new derived MetaMask account using synpress's built-in addNewAccount. + * accountName = 'Account 2', 'Account 3', etc. + */ +export async function addMetaMaskAccount( + metamaskPage: Page, + extensionId: string, + accountName: string +) { + await metamaskPage.goto(`chrome-extension://${extensionId}/home.html`) + await metamaskPage.waitForLoadState('domcontentloaded') + + await metamaskPage.locator('[data-testid="account-menu-icon"]').click() + await metamaskPage + .locator('[data-testid="multichain-account-menu-popover-add-account"]') + .click() + await metamaskPage + .locator( + '[data-testid="multichain-account-menu-popover-add-derived-account"]' + ) + .click() + + // Clear default name and type the desired account name + const nameInput = metamaskPage.locator('[data-testid="account-name-field"]') + if (await nameInput.isVisible({ timeout: 3000 }).catch(() => false)) { + await nameInput.clear() + await nameInput.fill(accountName) + } + + await metamaskPage + .locator('[data-testid="submit-add-account-with-name"]') + .click() + await metamaskPage.waitForTimeout(5000) +} + +const HARDHAT_RPC = 'http://127.0.0.1:8545' + +/** + * Calls a Hardhat JSON-RPC method from inside a test (uses page.evaluate / browser fetch). + */ +export async function hardhatRpc(page: Page, method: string, params: unknown[] = []) { + return page.evaluate( + async ([rpc, method, params]: [string, string, unknown[]]) => { + const res = await fetch(rpc, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ jsonrpc: '2.0', id: Date.now(), method, params }), + }) + const data = (await res.json()) as { result?: unknown; error?: { message: string } } + if (data.error) throw new Error(data.error.message) + return data.result + }, + [HARDHAT_RPC, method, params] as [string, string, unknown[]] + ) +} + +/** + * Calls a Hardhat JSON-RPC method from Node.js context (beforeAll / afterAll — no page available). + */ +export async function hardhatRpcNode(method: string, params: unknown[] = []) { + const res = await fetch(HARDHAT_RPC, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ jsonrpc: '2.0', id: Date.now(), method, params }), + }) + const data = (await res.json()) as { result?: unknown; error?: { message: string } } + if ((data as any).error) throw new Error((data as any).error.message) + return data.result as string +} + +export async function revokeMetamaskPermissions( + page: Page, + metamask: MetaMask +) { + // Revoke dapp permissions so the next connect uses Account 2 (not the cached Account 1) + await page.evaluate(async () => { + try { + await (window as any).ethereum.request({ + method: 'wallet_revokePermissions', + params: [{ eth_accounts: {} }], + }) + } catch {} + }) +} diff --git a/e2e/helpers/deploy.ts b/e2e/helpers/deploy.ts new file mode 100644 index 0000000..ea53178 --- /dev/null +++ b/e2e/helpers/deploy.ts @@ -0,0 +1,112 @@ +/** + * Deploys TrustVC contracts to local Hardhat and writes a test transferable + * document to e2e/fixtures/transferable-document.json. + * + * Prerequisites: + * - Local Hardhat node running: npx hardhat node + * + * Usage: + * npx ts-node --esm e2e/helpers/deploy.ts + * — or — + * node --loader ts-node/esm e2e/helpers/deploy.ts + */ + +import { ethers } from 'ethers' +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +// Hardhat default account #0 +const HOLDER_PRIVATE_KEY = + '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80' +const HOLDER_ADDRESS = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' + +// Hardhat default account #1 (transfer target) +const NEW_HOLDER_ADDRESS = '0x70997970C51812dc3A010C7d01b50e0d17dc79C8' + +const RPC_URL = 'http://127.0.0.1:8545' +const FIXTURES_DIR = path.resolve(__dirname, '../fixtures') + +async function deploy() { + const provider = new ethers.providers.JsonRpcProvider(RPC_URL) + const signer = new ethers.Wallet(HOLDER_PRIVATE_KEY, provider) + + console.log('Connected to Hardhat at', RPC_URL) + console.log('Deploying from', await signer.getAddress()) + + // ── Deploy TradeTrustToken (token registry) ────────────────────────────── + // Minimal ABI + bytecode — in practice pull from @tradetrust-tt/token-registry + // or use the SDK's deploy utilities. Shown here as pseudocode: + // + // import { TradeTrustToken__factory } from '@tradetrust-tt/token-registry' + // const tokenRegistry = await TradeTrustToken__factory.connect(signer).deploy( + // 'Test Token', 'TST', HOLDER_ADDRESS + // ) + // await tokenRegistry.deployed() + // + // For now we export the addresses so you can fill them in manually after + // deploying via `npx hardhat run scripts/deploy.js --network localhost`. + + const tokenRegistryAddress = process.env.TOKEN_REGISTRY_ADDRESS + const tokenId = + process.env.TOKEN_ID || + '0x0000000000000000000000000000000000000000000000000000000000000001' + + if (!tokenRegistryAddress) { + console.error( + '\nMissing TOKEN_REGISTRY_ADDRESS environment variable.\n' + + 'Deploy the token registry first and re-run:\n' + + ' TOKEN_REGISTRY_ADDRESS=0x... npx ts-node --esm e2e/helpers/deploy.ts\n' + ) + process.exit(1) + } + + // ── Build minimal transferable document ────────────────────────────────── + const document = { + '@context': [ + 'https://www.w3.org/ns/credentials/v2', + 'https://w3id.org/security/data-integrity/v2', + 'https://trustvc.io/context/render-method-context-v2.json', + 'https://trustvc.io/context/bill-of-lading-carrier.json', + 'https://trustvc.io/context/transferable-records-context.json', + ], + renderMethod: [ + { + type: 'EMBEDDED_RENDERER', + templateName: 'BILL_OF_LADING_CARRIER', + id: 'https://generic-templates.tradetrust.io', + }, + ], + credentialSubject: { + type: ['BillOfLadingCarrier'], + blNumber: 'E2E-TEST-001', + carrierName: 'E2E Test Carrier', + }, + // Transferable record fields + network: { + chain: 'HARDHAT', + chainId: '31337', + }, + tokenRegistry: tokenRegistryAddress, + tokenId, + // The current holder is Hardhat account #0 + // (set by the TitleEscrow contract, not the document itself) + } + + fs.mkdirSync(FIXTURES_DIR, { recursive: true }) + const outPath = path.join(FIXTURES_DIR, 'transferable-document.json') + fs.writeFileSync(outPath, JSON.stringify(document, null, 2)) + + console.log('\nWrote test document to', outPath) + console.log('Token registry:', tokenRegistryAddress) + console.log('Token ID: ', tokenId) + console.log('Holder: ', HOLDER_ADDRESS) + console.log('New holder: ', NEW_HOLDER_ADDRESS) +} + +deploy().catch(err => { + console.error(err) + process.exit(1) +}) diff --git a/e2e/helpers/global-setup.ts b/e2e/helpers/global-setup.ts new file mode 100644 index 0000000..ccfe995 --- /dev/null +++ b/e2e/helpers/global-setup.ts @@ -0,0 +1,25 @@ +import { execSync } from 'child_process' +import path from 'path' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +/** + * Playwright global setup: + * - Builds the MetaMask wallet cache via Synpress so tests start fast. + * - Does NOT deploy Hardhat contracts — run e2e/helpers/deploy.ts separately. + */ +export default async function globalSetup() { + try { + execSync( + 'npx synpress --wallet-setup-file ./wallet-setup/basic.setup.ts', + { + cwd: path.resolve(__dirname, '..'), + stdio: 'inherit', + } + ) + } catch (err) { + // Synpress cache may already exist — ignore duplicate-build errors + console.warn('[global-setup] synpress wallet build warning:', (err as Error).message) + } +} diff --git a/e2e/helpers/verify-helpers.ts b/e2e/helpers/verify-helpers.ts new file mode 100644 index 0000000..80a0cb7 --- /dev/null +++ b/e2e/helpers/verify-helpers.ts @@ -0,0 +1,88 @@ +import path from 'path' +import fs from 'fs' +import os from 'os' +import { expect, type Page } from '@playwright/test' + +export const TEMP_DIR = path.join(os.tmpdir(), 'trustvc-pol-amoy-tests') +fs.mkdirSync(TEMP_DIR, { recursive: true }) + +const UNUSED_HASH = 'deadbeef' + '0'.repeat(56) + +export function writeTamperedOa(srcPath: string, name: string): string { + const doc = JSON.parse(fs.readFileSync(srcPath, 'utf8')) + doc.signature = { ...doc.signature, targetHash: UNUSED_HASH } + const dest = path.join(TEMP_DIR, name) + fs.writeFileSync(dest, JSON.stringify(doc)) + return dest +} + +export function writeNotMintedOa(srcPath: string, name: string): string { + const doc = JSON.parse(fs.readFileSync(srcPath, 'utf8')) + doc.signature = { ...doc.signature, targetHash: UNUSED_HASH, merkleRoot: UNUSED_HASH } + const dest = path.join(TEMP_DIR, name) + fs.writeFileSync(dest, JSON.stringify(doc)) + return dest +} + +export function writeTamperedW3c(srcPath: string, name: string): string { + const doc = JSON.parse(fs.readFileSync(srcPath, 'utf8')) + const pv: string = doc.proof.proofValue + doc.proof = { ...doc.proof, proofValue: pv.slice(0, -1) + (pv.endsWith('A') ? 'B' : 'A') } + const dest = path.join(TEMP_DIR, name) + fs.writeFileSync(dest, JSON.stringify(doc)) + return dest +} + +export function writeNotMintedW3c(srcPath: string, name: string): string { + const doc = JSON.parse(fs.readFileSync(srcPath, 'utf8')) + doc.credentialStatus = { ...doc.credentialStatus, tokenId: UNUSED_HASH } + const dest = path.join(TEMP_DIR, name) + fs.writeFileSync(dest, JSON.stringify(doc)) + return dest +} + +export async function uploadDoc(page: Page, filePath: string) { + const resetBtn = page.locator('[data-testid="upload-new-file-btn"]') + if (await resetBtn.isVisible({ timeout: 2_000 }).catch(() => false)) { + await resetBtn.click() + } + const tryAnotherBtn = page.locator('[data-testid="try-another-btn"]') + if (await tryAnotherBtn.isVisible({ timeout: 2_000 }).catch(() => false)) { + await tryAnotherBtn.click() + } + + await page.locator('#file-upload').setInputFiles(filePath) + + const verifying = page.locator('[data-testid="verifying-state"]') + // Loader may appear too briefly or be delayed by React batching; don't fail if missed. + await verifying.waitFor({ state: 'visible', timeout: 5_000 }).catch(() => {}) + await verifying.waitFor({ state: 'hidden', timeout: 90_000 }).catch(() => {}) + + // VerifyResult shown for valid docs; VerifyError (try-another-btn) for invalid/error. + await page + .locator('[data-testid="verify-result"], [data-testid="try-another-btn"]') + .first() + .waitFor({ state: 'visible', timeout: 60_000 }) +} + +export async function assertCheckStatus( + page: Page, + check: 'document_integrity' | 'document_status' | 'issuer_identity', + status: 'VALID', +) { + await expect( + page.locator(`[data-testid="check-${check}"][data-status="${status}"]`), + ).toBeVisible() +} + +// The component renders VerifyError (not VerifyResult) for invalid/error docs, +// so individual check statuses are not in the DOM for failing scenarios. +export async function assertVerificationFailed(page: Page) { + await expect(page.locator('[data-testid="try-another-btn"]')).toBeVisible() +} + +export async function assertAllValid(page: Page) { + await assertCheckStatus(page, 'document_integrity', 'VALID') + await assertCheckStatus(page, 'document_status', 'VALID') + await assertCheckStatus(page, 'issuer_identity', 'VALID') +} diff --git a/e2e/helpers/verify.ts b/e2e/helpers/verify.ts new file mode 100644 index 0000000..3ea3650 --- /dev/null +++ b/e2e/helpers/verify.ts @@ -0,0 +1,139 @@ +import { type Page, expect } from '@playwright/test' + +/** + * Helpers for the verification (read-only) e2e tests — no MetaMask needed. + * + * The app renders one of two outcomes after verification completes: + * - isValid === true → with three green checks + * - isValid === false → overlay (generic; the UI does NOT + * surface which of identity/status/integrity failed) + * so happy paths assert the green checks, error paths assert the error overlay. + */ + +const DOC_STORE = '0x057ef64E23666F000b34aE31332854aCBd1c8544' // setup-document-store.cjs (acct #3, nonce 0) +// Address with no contract — used by the *_contract_not_found fixtures (DNS lists it so +// identity passes, but there's no contract there → CONTRACT_NOT_FOUND). +const NO_CONTRACT = '0x000000000000000000000000000000000000bEEF' +const TOKEN_REGISTRY = '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512' // setup-contracts.cjs + +/** Resets any prior result so a fresh file can be uploaded. */ +async function resetIfNeeded(page: Page) { + for (const sel of ['[data-testid="upload-new-file-btn"]', '[data-testid="try-another-btn"]']) { + const btn = page.locator(sel) + if (await btn.isVisible({ timeout: 1000 }).catch(() => false)) { + await btn.click() + break + } + } +} + +async function uploadAndWait(page: Page, documentPath: string) { + await resetIfNeeded(page) + // #file-upload is display:none — setInputFiles works on hidden inputs. + await page.locator('#file-upload').setInputFiles(documentPath) + await page.locator('[data-testid="verifying-state"]').waitFor({ state: 'visible', timeout: 30_000 }) + await page.locator('[data-testid="verifying-state"]').waitFor({ state: 'hidden', timeout: 60_000 }) +} + +/** + * Upload a document and assert it verifies VALID: all three checks green AND the + * document renderer mounts (template iframe). Pass renderer:false to skip the + * renderer assertion (e.g. if the template host is unreachable in the env). + */ +export async function uploadAndExpectValid( + page: Page, + documentPath: string, + { renderer = true, template }: { renderer?: boolean; template?: string } = {} +) { + await uploadAndWait(page, documentPath) + await page.locator('[data-testid="verify-result"]').waitFor({ state: 'visible', timeout: 15_000 }) + for (const type of ['document_integrity', 'document_status', 'issuer_identity']) { + await page + .locator(`[data-testid="check-${type}"][data-status="VALID"]`) + .waitFor({ state: 'visible' }) + } + if (renderer) { + await page.locator('[data-testid="document-renderer"]').waitFor({ state: 'visible', timeout: 15_000 }) + // FrameConnector mounts the template iframe... + await page.locator('[data-testid="document-renderer"] iframe').waitFor({ state: 'attached', timeout: 15_000 }) + // ...and data-renderer-ready flips to "true" only once the template has actually + // rendered (the renderer posts its ready/height signal back). Needs internet to + // reach the template host (generic-templates.tradetrust.io). + await page + .locator('[data-testid="document-renderer"][data-renderer-ready="true"]') + .waitFor({ state: 'attached', timeout: 30_000 }) + // "Rendered View: